1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-FileCopyrightText: Copyright 2008 Sandia Corporation
// SPDX-License-Identifier: LicenseRef-BSD-3-Clause-Sandia-USGov
#include "vtkActor.h"
#include "vtkGraphMapper.h"
#include "vtkMath.h"
#include "vtkRegressionTestImage.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include "vtkSQLGraphReader.h"
#include "vtkSQLQuery.h"
#include "vtkSQLiteDatabase.h"
#include "vtkSmartPointer.h"
#include <sstream>
#define VTK_CREATE(type, name) vtkSmartPointer<type> name = vtkSmartPointer<type>::New()
int TestSQLGraphReader(int argc, char* argv[])
{
vtkIdType vertices = 10;
// Create a SQLite in-memory database
VTK_CREATE(vtkSQLiteDatabase, database);
database->SetDatabaseFileName(":memory:");
bool ok = database->Open("");
if (!ok)
{
cerr << "Could not open database!" << endl;
cerr << database->GetLastErrorText() << endl;
return 1;
}
// Build a graph
vtkSmartPointer<vtkSQLQuery> q;
q.TakeReference(database->GetQueryInstance());
std::ostringstream oss;
q->SetQuery("DROP TABLE IF EXISTS vertices");
q->Execute();
q->SetQuery("CREATE TABLE vertices (id INTEGER, x FLOAT, y FLOAT)");
q->Execute();
for (int i = 0; i < vertices; i++)
{
oss.str("");
oss << "INSERT INTO vertices VALUES(" << i << ", "
<< 0.5 * cos(i * 2.0 * vtkMath::Pi() / vertices) << ", "
<< 0.5 * sin(i * 2.0 * vtkMath::Pi() / vertices) << ")" << endl;
q->SetQuery(oss.str().c_str());
q->Execute();
}
q->SetQuery("DROP TABLE IF EXISTS edges");
q->Execute();
q->SetQuery("CREATE TABLE edges (id INTEGER, source INTEGER, target INTEGER)");
q->Execute();
for (int i = 0; i < vertices; i++)
{
oss.str("");
oss << "INSERT INTO edges VALUES(" << 2 * i + 0 << ", " << i << ", " << (i + 1) % vertices
<< ")" << endl;
q->SetQuery(oss.str().c_str());
q->Execute();
oss.str("");
oss << "INSERT INTO edges VALUES(" << 2 * i + 1 << ", " << (i + 3) % vertices << ", " << i
<< ")" << endl;
q->SetQuery(oss.str().c_str());
q->Execute();
}
// Set up graph reader
VTK_CREATE(vtkSQLGraphReader, reader);
vtkSmartPointer<vtkSQLQuery> edgeQuery;
edgeQuery.TakeReference(database->GetQueryInstance());
edgeQuery->SetQuery("select * from edges");
reader->SetEdgeQuery(edgeQuery);
vtkSmartPointer<vtkSQLQuery> vertexQuery;
vertexQuery.TakeReference(database->GetQueryInstance());
vertexQuery->SetQuery("select * from vertices");
reader->SetVertexQuery(vertexQuery);
reader->SetSourceField("source");
reader->SetTargetField("target");
reader->SetVertexIdField("id");
reader->SetXField("x");
reader->SetYField("y");
// Display the graph
VTK_CREATE(vtkGraphMapper, mapper);
mapper->SetInputConnection(reader->GetOutputPort());
mapper->SetEdgeColorArrayName("id");
mapper->ColorEdgesOn();
mapper->SetVertexColorArrayName("id");
mapper->ColorVerticesOn();
VTK_CREATE(vtkActor, actor);
actor->SetMapper(mapper);
VTK_CREATE(vtkRenderer, ren);
ren->AddActor(actor);
VTK_CREATE(vtkRenderWindowInteractor, iren);
VTK_CREATE(vtkRenderWindow, win);
win->AddRenderer(ren);
win->SetInteractor(iren);
int retVal = vtkRegressionTestImage(win);
if (retVal == vtkRegressionTester::DO_INTERACTOR)
{
iren->Initialize();
iren->Start();
retVal = vtkRegressionTester::PASSED;
}
return !retVal;
}
|