18 #include "vtkRenderWindow.h"
19 #include "vtkRenderWindowInteractor.h"
20 #include "vtkRendererCollection.h"
21 #include "vtkCellArray.h"
22 #include "vtkPointData.h"
23 #include "vtkCellData.h"
24 #include "vtkPolyData.h"
25 #include "vtkShortArray.h"
27 #include "vtkLightCollection.h"
28 #include "vtkProperty.h"
29 #include "vtkPolyDataMapper2D.h"
30 #include "vtkMapper.h"
31 #include "vtkProperty2D.h"
32 #include "vtkObjectFactory.h"
33 #include "vtkCamera.h"
34 #include "vtkRenderLargeImage.h"
35 #include "vtkVRMLExporter.h"
36 #include "vtkTIFFWriter.h"
37 #include "vtkJPEGWriter.h"
38 #include "vtkRIBExporter.h"
39 #include "vtkLookupTable.h"
42 #include "vtkCallbackCommand.h"
43 #include "vtkCommand.h"
55 vtkObject* ret = vtkObjectFactory::CreateInstance(
"view_tri_interactor");
85 renWin_ = this->GetInteractor()->GetRenderWindow();
86 vtkRendererCollection * rens =
renWin_->GetRenderers();
87 rens->InitTraversal();
88 ren_ = rens->GetNextItem();
93 vtkCellArray * lines = vtkCellArray::New();
94 lines->InsertNextCell(2,
pt);
95 vtkPolyData * data = vtkPolyData::New();
98 data->SetLines(lines);
100 vtkPolyDataMapper2D * map = vtkPolyDataMapper2D::New();
101 map->SetInputData(data);
103 actor_ = vtkActor2D::New();
106 actor_->GetProperty()->SetColor(1,0.5,0.5);
107 vtkLight * light = vtkLight::New();
108 light->PositionalOff();
109 light->SetLightTypeToCameraLight();
110 ren_->GetLights()->InitTraversal();
111 ren_->GetLights()->GetNextItem()->SwitchOff();
112 ren_->AddLight(light);
121 vtkRenderWindowInteractor * rwi = this->Interactor;
122 int ctrl = rwi->GetControlKey();
123 int shift = rwi->GetShiftKey();
125 rwi->GetEventPosition(X,Y);
126 if (((ctrl >= 1)&&(shift >= 1))||(
n_==1))
139 ren_->SetDisplayPoint(X,Y,Z);
140 ren_->DisplayToWorld();
141 double * dp =
ren_->GetWorldPoint();
147 for (
short i = 0; i < 3; i++) x[i] = dp[i]/dp[3];
152 locator_->FindClosestPoint(x,x,cellId,subId,dist2);
153 vtkDataArray * scalars =
geometry_->GetCellData()->GetScalars();
154 int val = (int)scalars->GetTuple1(cellId);
157 scalars->SetTuple1(cellId,0);
158 std::cerr << cellId <<
" 0" << std::endl;
162 scalars->SetTuple1(cellId,1);
163 std::cerr << cellId <<
" 1" << std::endl;
166 rwi->GetRenderWindow()->Render();
171 std::cout <<
"point " <<
n_ <<
" : ";
172 for (
short k=0; k<3; k++)
174 x_[3*(
n_-1)+k] = dp[k] / dp[3];
175 std::cout <<
x_[3*(
n_-1)+k] <<
" ";
177 std::cout << std::endl;
191 float x2d[] = {
static_cast<float>(X),
static_cast<float>(Y),0.f};
200 vtkInteractorStyleTrackballCamera::OnLeftButtonDown();
205 vtkRenderWindowInteractor *rwi = this->Interactor;
206 int ctrl = rwi->GetControlKey();
207 int shift = rwi->GetShiftKey();
208 if (((ctrl < 1)||(shift <1))&&(
n_ != 1))
209 vtkInteractorStyleTrackballCamera::OnLeftButtonUp();
217 vtkInteractorStyleTrackballCamera::OnRightButtonDown();
222 vtkInteractorStyleTrackballCamera::OnRightButtonUp();
227 vtkInteractorStyleTrackballCamera::OnMiddleButtonDown();
232 vtkInteractorStyleTrackballCamera::OnMiddleButtonUp();
237 vtkRenderWindowInteractor *rwi = this->Interactor;
239 rwi->GetEventPosition(X,Y);
242 float x2d[] = {
static_cast<float>(X),
static_cast<float>(Y),0.f};
247 vtkInteractorStyleTrackballCamera::OnMouseMove();
253 vtkRenderWindowInteractor *rwi = this->GetInteractor();
254 char c = rwi->GetKeyCode();
255 vtkRendererCollection * col = rwi->GetRenderWindow()->GetRenderers();
256 col->InitTraversal();
257 vtkCamera * cam = col->GetNextItem()->GetActiveCamera();
260 vtkRendererCollection * col = rwi->GetRenderWindow()->GetRenderers();
261 col->InitTraversal();
262 ren_ = col->GetNextItem();
264 if ((c==
'o')||(c==
'O')) {}
265 else if ((c==
'p')||(c==
'P'))
267 cam->ParallelProjectionOn();
268 rwi->GetRenderWindow()->SetWindowName(
"view_tri (parallel)");
269 rwi->GetRenderWindow()->Render();
271 else if ((c==
'c')||(c==
'C'))
273 cam->ParallelProjectionOff();
274 rwi->GetRenderWindow()->SetWindowName(
"view_tri (central)");
275 rwi->GetRenderWindow()->Render();
277 else if ((c==
'i')||(c==
'I'))
279 vtkActor *anActor =
ren_->GetActors()->GetLastActor();
282 ren_->SetBackground(1.,1.,1.);
285 if (
flat_||(anActor->GetProperty()->GetRepresentation()==VTK_WIREFRAME))
286 anActor->GetProperty()->SetColor(0.,0.,0.);
287 anActor->SetBackfaceProperty(anActor->GetProperty());
292 ren_->SetBackground(0.,0.,0.);
295 anActor->GetProperty()->SetColor(1.,1.,1.);
296 anActor->SetBackfaceProperty(anActor->GetProperty());
300 rwi->GetRenderWindow()->Render();
302 else if ((c==
'n')||(c==
'N'))
304 static double dp0[] = {0.,0.,0.,0.};
306 rwi->GetEventPosition(X,Y);
307 float Z =
ren_->GetZ(X,Y);
310 ren_->SetDisplayPoint(X,Y,Z);
311 ren_->DisplayToWorld();
312 double * dp =
ren_->GetWorldPoint();
313 if ((dp[0]==dp0[0])&&(dp[1]==dp0[1])&&(dp[2]==dp0[2])&&(dp[3]==dp0[3]))
314 std::cout << std::endl;
317 for (
short i=0; i<3; i++) std::cout << dp[i]/dp[3] <<
" ";
318 std::cout << std::flush;
320 for (
short i=0; i<4; i++) dp0[i] = dp[i];
324 else if ((c==
'e')||(c==
'E'))
329 std::cerr <<
"delete mode: on" << std::endl;
330 vtkDataArray * scalars = vtkShortArray::New();
331 scalars->SetNumberOfTuples(
geometry_->GetNumberOfCells());
332 scalars->SetNumberOfComponents(1);
333 scalars->FillComponent(0,1);
334 geometry_->GetCellData()->SetScalars(scalars);
337 vtkLookupTable * lut = vtkLookupTable::New();
338 lut->SetNumberOfTableValues(2);
339 lut->SetTableValue(0,.85,.08,.08,1.);
340 lut->SetTableValue(1,1.,1.,1.,1.);
341 vtkMapper * map =
ren_->GetActors()->GetLastActor()->GetMapper();
342 map->SetScalarModeToUseCellData();
343 map->SetScalarRange(0.,1.);
344 map->ScalarVisibilityOn();
345 map->SetLookupTable(lut);
353 std::cerr <<
"delete mode: off" << std::endl;
354 vtkMapper * map =
ren_->GetActors()->GetLastActor()->GetMapper();
355 map->SetScalarModeToUsePointData();
358 rwi->GetRenderWindow()->Render();
360 else if ((c==
'm')||(c==
'M'))
363 vtkCamera * cam =
ren_->GetActiveCamera();
364 cam->GetPosition(po);
365 cam->GetFocalPoint(fo);
366 vtkLightCollection * lights =
ren_->GetLights();
367 lights->InitTraversal();
368 vtkLight * light = lights->GetNextItem();
369 light->SetPosition(po);
370 light->SetFocalPoint(fo);
371 light->SetIntensity(1);
372 ren_->LightFollowCameraOn();
375 else if ((c==
'b')||(c==
'B'))
378 vtkCamera * cam =
ren_->GetActiveCamera();
379 cam->GetPosition(po);
380 cam->GetFocalPoint(fo);
381 vtkLightCollection * lights =
ren_->GetLights();
382 lights->InitTraversal();
383 vtkLight * light = lights->GetNextItem();
384 light->SetPosition(po);
385 light->SetFocalPoint(fo);
386 light->SetIntensity(1);
387 ren_->LightFollowCameraOn();
389 ren_->LightFollowCameraOff();
391 else if ((c==
'x')||(c==
'X'))
394 vtkCamera * cam =
ren_->GetActiveCamera();
395 cam->GetPosition(po);
396 cam->GetFocalPoint(fo);
399 a_point
dir(1.,0.,0.);
402 double dist = (p_fo-p_po).norm();
403 a_point np_po = p_fo-
dir*dist;
404 cam->SetPosition(np_po.x(),np_po.y(),np_po.z());
405 cam->SetViewUp(0.,0.,1.);
408 else if ((c==
'y')||(c==
'Y'))
411 vtkCamera * cam =
ren_->GetActiveCamera();
412 cam->GetPosition(po);
413 cam->GetFocalPoint(fo);
416 a_point
dir(0.,1.,0.);
419 double dist = (p_fo-p_po).norm();
420 a_point np_po = p_fo-
dir*dist;
421 cam->SetPosition(np_po.x(),np_po.y(),np_po.z());
422 cam->SetViewUp(0.,0.,1.);
425 else if ((c==
'z')||(c==
'Z'))
428 vtkCamera * cam =
ren_->GetActiveCamera();
429 cam->GetPosition(po);
430 cam->GetFocalPoint(fo);
433 a_point
dir(0.,0.,1.);
436 double dist = (p_fo-p_po).norm();
437 a_point np_po = p_fo-
dir*dist;
438 cam->SetPosition(np_po.x(),np_po.y(),np_po.z());
439 cam->SetViewUp(1.,0.,0.);
442 else if ((c==
'w')||(c==
'W'))
444 vtkActor *anActor =
ren_->GetActors()->GetLastActor();
445 anActor->GetProperty()->SetRepresentationToWireframe();
447 anActor->GetProperty()->SetColor(0.,0.,0.);
448 anActor->GetProperty()->LightingOff();
449 anActor->SetBackfaceProperty(anActor->GetProperty());
452 else if ((c==
's')||(c==
'S'))
454 vtkActor *anActor =
ren_->GetActors()->GetLastActor();
455 anActor->GetProperty()->SetRepresentationToSurface();
457 anActor->GetProperty()->SetColor(1.,1.,1.);
458 anActor->GetProperty()->LightingOn();
459 anActor->GetMapper()->ScalarVisibilityOn();
462 else if ((c==
'v')||(c==
'V'))
464 vtkVRMLExporter * writer = vtkVRMLExporter::New();
465 writer->SetFileName(
"view_tri.wrl");
466 writer->SetInput(rwi->GetRenderWindow());
470 else if ((c==
'j')||(c==
'J'))
472 vtkRenderLargeImage * large = vtkRenderLargeImage::New();
473 large->SetInput(
ren_);
475 vtkJPEGWriter * writer = vtkJPEGWriter::New();
476 writer->SetFileName(
"view_tri.jpg");
477 writer->SetInputConnection(large->GetOutputPort());
479 writer->SetQuality(100);
484 else if ((c==
't')||(c==
'T'))
486 vtkRenderLargeImage * large = vtkRenderLargeImage::New();
487 large->SetInput(
ren_);
489 vtkTIFFWriter * writer = vtkTIFFWriter::New();
490 writer->SetFileName(
"view_tri.tif");
491 writer->SetInputConnection(large->GetOutputPort());
498 double r = cam->GetRoll();
499 std::cout << r << std::endl;
503 vtkRIBExporter * rib = vtkRIBExporter::New();
504 rib->SetInput(rwi->GetRenderWindow());
505 rib->SetFilePrefix(
"view_tri");
509 else if ((c==
'f')||(c==
'F'))
512 vtkCamera * cam =
ren_->GetActiveCamera();
513 cam->GetPosition(po);
514 cam->GetFocalPoint(fo);
515 std::cout << po[0] <<
" " << po[1] <<
" " << po[2] <<
" ";
516 std::cout << fo[0] <<
" " << fo[1] <<
" " << fo[2] << std::endl;
518 else if ((c==
'q')||(c==
'Q'))
521 vtkInteractorStyleTrackballCamera::OnChar();
523 else if ((c!=
'r')&&(c!=
'R'))
524 vtkInteractorStyleTrackballCamera::OnChar();
529 this->Superclass::PrintSelf(os,indent);
530 os << indent <<
"P.Smars" <<
"\n";
virtual ~view_tri_interactor()
void PrintSelf(ostream &os, vtkIndent indent) override
static view_tri_interactor * New()
virtual void OnRightButtonDown() override
virtual void OnLeftButtonUp() override
virtual void OnMiddleButtonDown() override
virtual void OnMouseMove() override
virtual void OnLeftButtonDown() override
vtkCellLocator * locator_
virtual void OnRightButtonUp() override
vtkRenderWindow * renWin_
virtual void OnMiddleButtonUp() override
virtual void OnChar() override
a_point dir(int i, int l)
std::string print(double s)