[vtkusers] Question about surface normal
Luca Pamparana
luca.pamparana at gmail.com
Thu Nov 5 09:07:01 EST 2009
Hello everyone,
Started playing with vtk recently and have a simple code that simply
draws a 2D plane in 3D space. I am using vtkPolyData class and using a
vtkActor to render it.
This might be more of a geometry question. So, what I want to do is
have the surface normal point to a given point in 3D space. For
example, I might want the normal to point to the origin of my 3D
scene. Does anyone know how I might be able to calculate that.
Here is the bit of code that I have so far, which I have hacked
together after looking at some VTK examples.
// Code starts
#include "vtkPoints.h"
#include "vtkCellArray.h"
#include "vtkPolyData.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include "vtkProperty.h"
int main()
{
vtkPolyData * geometry = vtkPolyData::New();
vtkPoints * testPoints = vtkPoints::New();
testPoints->Allocate(4);
vtkCellArray *testPolys = vtkCellArray::New();
testPolys->Allocate(testPolys->EstimateSize(1,4));
double x[3];
vtkIdType pts[4];
x[0] = -2.5;
x[1] = -2.5;
x[2] = -2.5;
testPoints->InsertNextPoint(x);
x[0] = 2.5;
x[1] = -2.5;
x[2] = -2.5;
testPoints->InsertNextPoint(x);
x[0] = -2.5;
x[1] = 2.5;
x[2] = -2.5;
testPoints->InsertNextPoint(x);
x[0] = 2.5;
x[1] = 2.5;
x[2] = -2.5;
testPoints->InsertNextPoint(x);
pts[0] = 0; pts[1] = 2; pts[2] = 3; pts[3] = 1;
testPolys->InsertNextCell(4,pts);
geometry->SetPoints(testPoints);
testPoints->Delete();
testPolys->Squeeze();
geometry->SetPolys(testPolys);
testPolys->Delete();
vtkRenderer *renderer = vtkRenderer::New();
vtkRenderWindow *renWin = vtkRenderWindow::New();
renWin->AddRenderer(renderer);
vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
iren->SetRenderWindow(renWin);
vtkPolyDataMapper * testMapper = vtkPolyDataMapper::New();
testMapper->SetInput(geometry);
vtkActor * testActor = vtkActor::New();
testActor->SetMapper(testMapper);
testActor->GetProperty()->SetColor(1, 0, 0);
renderer->AddActor(testActor);
renderer->SetBackground(1,1,1);
renWin->SetSize(300,300);
renWin->Render();
iren->Start();
testActor->Delete();
testMapper->Delete();
iren->Delete();
renWin->Delete();
renderer->Delete();
return 0;
}
// Code ends
Looking forward to your help.
Sincerely,
Luc
More information about the vtkusers
mailing list