コード例 #1
0
ファイル: PathVisualiser.cpp プロジェクト: eeue56/ovas-2
void PathVisualiser::VisualisePath(int* path, int len) {

    int totColours = 256 * 3;
    int thisColour;
    renderer->SetBackground(1, 1, 1);
    for (int i = 0; i < len; i++) {
        int viewIndex = path[i];
        GeoPoint* view = oc->geoSphere->getView(oc->path[i]);
        float* pos = view->getPoint();

        vtkSmartPointer<vtkSphereSource> aViewSphereS = vtkSmartPointer<vtkSphereSource>::New();

        aViewSphereS->SetCenter(pos[0], pos[1], pos[2]);
        aViewSphereS->SetRadius(sphereRadius);
        aViewSphereS->SetPhiResolution(20);
        aViewSphereS->SetThetaResolution(20);
        thisColour = (totColours / len) * i;

        float b = 0;
        float g = 0;
        float r = 0;
        float ifl = (float) i;
        float len3rd = (float) (len / 3);
        if (ifl < len3rd) {
            b = ifl / len3rd;
        }
        if (ifl >= len3rd && ifl < (2 * len3rd)) {
            g = (ifl - len3rd) / len3rd;
        }
        if (ifl > (2 * len3rd)) {
            r = (ifl - (2 * len3rd)) / len3rd;
        }


        //
        ////        if(b>1){
        ////            g=--b;
        ////        }
        ////        if(b>1){
        ////            r=--b;
        ////            g--;
        ////        }

        cout << " for view " << i << " view " << viewIndex << " pos " << pos[0] << " " << pos[1] << " " << pos[2] << " colours " << r << " " << g << " " << b << endl;
        aViewSphereS->Update();
        vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
        mapper->SetInputConnection(aViewSphereS->GetOutputPort());
        vtkSmartPointer<vtkActor> aViewSphereActor = vtkSmartPointer<vtkActor>::New();
        aViewSphereActor->SetMapper(mapper);
        aViewSphereActor->GetProperty()->SetAmbient(1); //SetShading(0);
        aViewSphereActor->GetProperty()->SetDiffuse(0.5); //SetShading(0);
        aViewSphereActor->GetProperty()->SetSpecular(0.5); //SetShading(0);
        //aViewSphereActor->GetProperty()->SetInterpolationToFlat(); //aViewSphereActor->GetProperty()->SetOpacity(0.5);
        aViewSphereActor->GetProperty()->SetColor(r, g, b);
        renderer->AddActor(aViewSphereActor);
        //cout<<"adding actor at "<<pos[0]<<" "<<pos[1]<<" "<<pos[2]<<endl;
    }

    // Create a sphere
    //  vtkSmartPointer<vtkSphereSource> sphereSource =
    //    vtkSmartPointer<vtkSphereSource>::New();
    //  sphereSource->SetCenter(0.0, 0.0, 0.0);
    //  sphereSource->SetRadius(2.0);
    //
    //  vtkSmartPointer<vtkPolyDataMapper> mapper =
    //    vtkSmartPointer<vtkPolyDataMapper>::New();
    //  mapper->SetInputConnection(sphereSource->GetOutputPort());
    //
    //  vtkSmartPointer<vtkActor> actor =
    //    vtkSmartPointer<vtkActor>::New();
    //  actor->SetMapper(mapper);
    // renderer->AddActor(actor);

    vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
            vtkSmartPointer<vtkRenderWindowInteractor>::New();
    renderWindowInteractor->SetRenderWindow(renderWindow);

    renderWindow->Render();
    renderWindowInteractor->Start();
    vtkSmartPointer<vtkWindowToImageFilter> windowToImageFilter = vtkSmartPointer<vtkWindowToImageFilter>::New();
    windowToImageFilter->SetInput(renderWindow);
    vtkSmartPointer<vtkPNGWriter> writer = vtkSmartPointer<vtkPNGWriter>::New();
    writer->SetInput(windowToImageFilter->GetOutput());
    string filename = "pathVis.png";
    windowToImageFilter->Update();
    filename = *(oc->resultsPath) + filename;
    cout << "OUTPUTTING to " << filename << endl;
    writer->SetFileName(filename.c_str());
    writer->Write();


}