• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

src/DGVLatticeVTK.cpp

Go to the documentation of this file.
00001 
00022 #include "DGVLatticeVTK.h"
00023 
00024 #include <QFileInfo>
00025 
00026 #include "vtkTransform.h"
00027 
00028 DGVLatticeVTK::DGVLatticeVTK(QWidget *parent) : QVTKWidget(parent)
00029 {
00030     unit = 10.0;
00031     defaultSize = 13;
00032     setDimensions(2);
00033     defaultRadius = 1.0;
00034     generatedBefore = false;
00035     rightHanded = true;
00036     axesEnabledBefore = false;
00037 
00038     property = vtkProperty::New();
00039 }
00040 
00041 DGVLatticeVTK::~DGVLatticeVTK()
00042 {
00043     if(generatedBefore)
00044     {
00046         sphere->Delete();
00047         mapper->Delete();
00048         if(dimension == 1 || dimension == 2 || dimension == 3)
00049         {
00050             for(int j = 0; j < latticePoints.size(); j ++)
00051                 latticePoints(j)->Delete();
00052         }
00053         renderer->Delete();
00054         renderWin->Delete();
00055         if(axesEnabledBefore)
00056             axes->Delete();
00057     }
00058 
00059     property->Delete();
00060 }
00061 
00062 void DGVLatticeVTK::setName(QString filename)
00063 {
00064     name = filename;
00065     setWindowTitle(strippedNamePrefix());
00066 }
00067 
00068 void DGVLatticeVTK::setDimensions(int dimensions)
00069 {
00070     dimension = dimensions;
00071     latticeParameters.resize(dimension);
00072     latticeParameters = unit;
00073     latticeSize.resize(dimension);
00074     latticeSize = defaultSize;
00075 }
00076 
00077 void DGVLatticeVTK::setDefaultSize(int value)
00078 {
00079     defaultSize = value;
00080     latticeSize = defaultSize;
00081 }
00082 
00083 void DGVLatticeVTK::setBackgroundColour(double red, double green, double blue)
00084 {
00085     renderer->SetBackground(red/256,green/256,blue/256);
00086     renderWin->Render();
00087 }
00088 
00089 void DGVLatticeVTK::setLatticeColour(double red, double green, double blue)
00090 {
00091     int count = 0;
00092 
00093     if(generatedBefore)
00094     {
00095         if(dimension == 2)
00096         {
00097             for(int j = 0; j < latticeSize(0); j ++)
00098             {
00099                 for(int k = 0; k < latticeSize(1); k ++)
00100                 {
00101                     latticePoints(count)->GetProperty()->SetColor(red,green,blue);
00102                     count ++;
00103                 }
00104             }
00105         }
00106     }
00107     else
00108         property->SetColor(red,green,blue);
00109 }
00110 
00111 void DGVLatticeVTK::setLatticePointColour(int x, int y, double red, double green, double blue)
00112 {
00113     if(generatedBefore)
00114     {
00115         if(dimension == 2)
00116             latticePoints((y+x*latticeSize(1))%latticePoints.size())->GetProperty()->SetColor(red,green,blue);
00117     }
00118 }
00119 
00120 void DGVLatticeVTK::viewAsRightHanded()
00121 {
00122     if(!rightHanded)
00123     {
00124         vtkCamera *camera = renderer->GetActiveCamera();
00125 
00126         camera->Roll(90);
00127 
00128         rightHanded = true;
00129     }
00130 }
00131 
00132 void DGVLatticeVTK::viewAsMatrix()
00133 {
00134     if(rightHanded)
00135     {
00136         vtkCamera *camera = renderer->GetActiveCamera();
00137 
00138         camera->Roll(-90);
00139 
00140         rightHanded = false;
00141     }
00142 }
00143 
00144 void DGVLatticeVTK::enableAxes()
00145 {
00146     if(!axesEnabledBefore)
00147     {
00148         axes = vtkAxesActor::New();
00149         axesEnabledBefore = true;
00150     }
00151 
00152     //axes->SetTotalLength(latticeParameters(0)*latticeSize(0),latticeParameters(1)*latticeSize(1),0);
00153     axes->SetTotalLength(latticeParameters(0)*0.75,latticeParameters(1)*0.75,0);
00154     axes->AxisLabelsOff();
00155     renderer->AddActor(axes);
00156 }
00157 
00158 void DGVLatticeVTK::disableAxes()
00159 {
00160     if(!axesEnabledBefore)
00161     {
00162         axes = vtkAxesActor::New();
00163         axesEnabledBefore = true;
00164     }
00165 
00166     renderer->RemoveActor(axes);
00167 }
00168 
00169 void DGVLatticeVTK::addActorToLattice(vtkActor *actorToAdd)
00170 {
00171     renderer->AddActor(actorToAdd);
00172     //renderer->Update()
00173     renderWin->Render();
00174 }
00175 
00176 void DGVLatticeVTK::generateLattice()
00177 {
00178     int totalPoints = 1;
00179 
00180     if(!generatedBefore)
00181     {
00182         sphere = vtkSphereSource::New();
00183         mapper = vtkPolyDataMapper::New();
00184         renderer = vtkRenderer::New();
00185         renderWin = vtkRenderWindow::New();
00186         generatedBefore = true;
00187     }
00188 
00189     sphere->SetRadius(defaultRadius);
00190     sphere->SetCenter(0,0,0);
00191     sphere->Update();
00192 
00193     mapper->SetInput(sphere->GetOutput());
00194     //mapper->SetScalarRange(0, radius);
00195     mapper->Update();
00196 
00197     for(int j = 0; j < dimension; j ++)
00198         totalPoints *= latticeSize(j);
00199 
00200     int count = 0;
00201     vtkTransform *transform;
00202     latticePoints.resizeAndPreserve(totalPoints);
00203     if(dimension == 1)
00204     {
00205         for(int j = 0; j < latticeSize(0); j ++)
00206         {
00207             transform = vtkTransform::New();
00208             latticePoints(count) = vtkActor::New();
00209             latticePoints(count)->SetMapper(mapper);
00210             transform->SetMatrix(latticePoints(count)->GetMatrix());
00211             transform->Translate(latticeParameters(0)*j,0,0);
00212             transform->Update();
00213             latticePoints(count)->PokeMatrix(transform->GetMatrix());
00214             latticePoints(count)->GetProperty()->SetColor(property->GetColor()[0],property->GetColor()[1],property->GetColor()[2]);
00215             renderer->AddActor(latticePoints(count));
00216             transform->Delete();
00217             count ++;
00218         }
00219     }
00220     else if(dimension == 2)
00221     {
00222         for(int j = 0; j < latticeSize(0); j ++)
00223         {
00224             for(int k = 0; k < latticeSize(1); k ++)
00225             {
00226                 transform = vtkTransform::New();
00227                 latticePoints(count) = vtkActor::New();
00228                 latticePoints(count)->SetMapper(mapper);
00229                 transform->SetMatrix(latticePoints(count)->GetMatrix());
00230                 transform->Translate(latticeParameters(0)*j,latticeParameters(1)*k,0);
00231                 transform->Update();
00232                 latticePoints(count)->PokeMatrix(transform->GetMatrix());
00233                 latticePoints(count)->GetProperty()->SetColor(property->GetColor()[0],property->GetColor()[1],property->GetColor()[2]);
00234                 renderer->AddActor(latticePoints(count));
00235                 transform->Delete();
00236                 count ++;
00237             }
00238         }
00239     }
00240     else if(dimension == 3)
00241     {
00242         for(int j = 0; j < latticeSize(0); j ++)
00243         {
00244             for(int k = 0; k < latticeSize(1); k ++)
00245             {
00246                 for(int l = 0; l < latticeSize(2); l ++)
00247                 {
00248                     transform = vtkTransform::New();
00249                     latticePoints(count) = vtkActor::New();
00250                     latticePoints(count)->SetMapper(mapper);
00251                     transform->SetMatrix(latticePoints(count)->GetMatrix());
00252                     transform->Translate(latticeParameters(0)*j,latticeParameters(1)*k,latticeParameters(2)*l);
00253                     transform->Update();
00254                     latticePoints(count)->PokeMatrix(transform->GetMatrix());
00255                     latticePoints(count)->GetProperty()->SetColor(property->GetColor()[0],property->GetColor()[1],property->GetColor()[2]);
00256                     renderer->AddActor(latticePoints(count));
00257                     transform->Delete();
00258                     count ++;
00259                 }
00260             }
00261         }
00262     }
00263     else
00264     {
00265         cerr << "ERROR: Lattice Dimension Not Supported!" << endl;
00266         return;
00267     }
00268 
00269     renderer->ResetCamera();
00270     renderer->SetBackground(0.1, 0.2, 0.4);
00271     renderer->ResetCameraClippingRange();
00272     renderWin->AddRenderer(renderer);
00273     SetRenderWindow(renderWin);
00274     renderWin->Render();
00275 }
00276 
00277 QString DGVLatticeVTK::strippedName()
00278 {
00279     return QFileInfo(name).fileName();
00280 }
00281 
00282 QString DGVLatticeVTK::strippedNamePrefix()
00283 {
00284     return "Lattice: " + QFileInfo(name).fileName();
00285 }

Generated on Wed Sep 8 2010 01:36:51 for DGV by  doxygen 1.7.1