//** // WissVis-Aufgabe 3 - Praxis WS 12/13 TUD Lehrstuhl CGV //** // mspehr #include #include #include #include /* #include #include #include #include */ #include #include #include #include #include #include #include //--- #include // to make the code easier readable: #define PTR vtkSmartPointer // note: the usage of this smart pointer is optional; it just lowers the chances for inadvertent heap overflows // i.e. { PTR var = PTR::New(); ...; } // is equivalent to { vtkClass* var = vtkClass::New(); ...; var->Delete(); } //--- #include "SamplePointSource.h" #include #include #include #include #include #include "MeshToRGBFilter.h" #include #include vtkRenderWindow* createRenderWindowFromMapper(vtkMapper* mapper, bool wireFrame) { PTR actor = PTR::New(); actor->SetMapper(mapper); if(wireFrame) actor->GetProperty()->SetRepresentationToWireframe(); PTR renderer = PTR::New(); renderer->AddActor(actor); vtkRenderWindow* window = vtkRenderWindow::New(); window->AddRenderer(renderer); return window; } void doRenderingAndInteraction(vtkRenderWindow* window) { // a) create interactor (with 'trackball' interactor style) PTR interactor = PTR::New(); interactor->SetRenderWindow(window); interactor->SetInteractorStyle(PTR::New()); //< (not necessary) // b) execute render/interaction loop interactor->Initialize(); interactor->Start(); } struct Triangle { vtkVector2 p1; vtkVector2 p2; vtkVector2 p3; }; void calcBarycentricCoords(vtkVector2 p, Triangle t, double coords[3]) { coords[0] = (p.X() - t.p2.X() - ((p.Y()-t.p2.Y())*(t.p3.X()-t.p2.X()))/(t.p3.Y()-t.p2.Y()))/ (t.p1.X()-t.p2.X()-((t.p1.Y()-t.p2.Y())*(t.p3.X()-t.p2.X())/(t.p3.Y()-t.p2.Y()))); coords[2] = (p.Y() - t.p2.Y() - coords[0] * (t.p1.Y() - t.p2.Y())) / (t.p3.Y() - t.p2.Y()); coords[1] = 1 - coords[0] - coords[2]; } int main() { // -- begin of basic visualization network definition -- // 1. create source PTR source = PTR::New(); PTR delaunay = PTR::New(); delaunay->SetInputConnection(source->GetOutputPort()); delaunay->Update(); MeshToRGBFilter* rgbFilter = new MeshToRGBFilter(); rgbFilter->SetInputConnection(delaunay->GetOutputPort()); rgbFilter->Update(); PTR mapper = PTR::New(); mapper->SetInputConnection(delaunay->GetOutputPort()); vtkRenderWindow* window = createRenderWindowFromMapper(mapper, true); //doRenderingAndInteraction(window); window->Delete(); PTR imMapper = PTR::New(); imMapper->SetInputConnection(rgbFilter->GetOutputPort()); //imMapper->SetInput(image); vtkRenderWindow* imWindow = createRenderWindowFromMapper(imMapper, false); doRenderingAndInteraction(imWindow); imWindow->Delete(); return 0; }