[vtkusers] Surface Rendering
Divya Rathore
divyarathore at gmail.com
Tue Apr 21 05:06:58 EDT 2009
Good that you were able to build it :)
The error message (essentially a suggestion) says that you need to supply
the data directory as the 2nd argument.
your_dir>Medical1.exe <full_path_to_data_dir>
where, full_path_to_data_dir is say, C:\vtkdata\headsq
also, add the constant part in the filenames.. xxx.1, xxx.2, xxx.3 then add
'xxx'
from your screenshot, I suggest this:
*D:\Test\cxx\OUT\Debug\Medica1.exe C:\vtkdata\headsq\quarter*
In the 2nd argument, C:\vtkdata\headsq\ is the directory and quarter.1,
quarter.2, quarter.3 etc are files in it.
Hope that helps!
- Divya Rathore
On Tue, Apr 21, 2009 at 2:26 PM, JOHN ATKINSON <johnimager at gmail.com> wrote:
> Hi,
>
> As per your instruction I built Medical1.cxx again with the sample
> data set headquarter.I have attached the screen shot of the output
> whcih is mere a command prompt .I am not able to view the rendered
> output.Please Help.
>
> Code.
> #include "vtkRenderer.h"
> #include "vtkRenderWindow.h"
> #include "vtkRenderWindowInteractor.h"
> #include "vtkVolume16Reader.h"
> #include "vtkPolyDataMapper.h"
> #include "vtkActor.h"
> #include "vtkOutlineFilter.h"
> #include "vtkCamera.h"
> #include "vtkProperty.h"
> #include "vtkPolyDataNormals.h"
> #include "vtkContourFilter.h"
>
> int main (int argc, char **argv)
> {
> if (argc < 2)
> {
> cout << "Usage: " << argv[0] << " DATADIR/headsq/quarter" << endl;
> return 1;
> }
>
> // Create the renderer, the render window, and the interactor. The
> renderer
> // draws into the render window, the interactor enables mouse- and
> // keyboard-based interaction with the data within the render window.
> //
> vtkRenderer *aRenderer = vtkRenderer::New();
> vtkRenderWindow *renWin = vtkRenderWindow::New();
> renWin->AddRenderer(aRenderer);
> vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
> iren->SetRenderWindow(renWin);
>
> // The following reader is used to read a series of 2D slices (images)
> // that compose the volume. The slice dimensions are set, and the
> // pixel spacing. The data Endianness must also be specified. The reader
> // usese the FilePrefix in combination with the slice number to construct
> // filenames using the format FilePrefix.%d. (In this case the FilePrefix
> // is the root name of the file: quarter.)
> vtkVolume16Reader *v16 = vtkVolume16Reader::New();
> v16->SetDataDimensions (64,64);
> v16->SetImageRange (1,93);
> v16->SetDataByteOrderToLittleEndian();
> v16->SetFilePrefix (argv[1]);
> v16->SetDataSpacing (3.2, 3.2, 1.5);
>
> // An isosurface, or contour value of 500 is known to correspond to the
> // skin of the patient. Once generated, a vtkPolyDataNormals filter is
> // is used to create normals for smooth surface shading during rendering.
> vtkContourFilter *skinExtractor = vtkContourFilter::New();
> skinExtractor->SetInputConnection(v16->GetOutputPort());
> skinExtractor->SetValue(0, 500);
> vtkPolyDataNormals *skinNormals = vtkPolyDataNormals::New();
> skinNormals->SetInputConnection(skinExtractor->GetOutputPort());
> skinNormals->SetFeatureAngle(60.0);
> vtkPolyDataMapper *skinMapper = vtkPolyDataMapper::New();
> skinMapper->SetInputConnection(skinNormals->GetOutputPort());
> skinMapper->ScalarVisibilityOff();
> vtkActor *skin = vtkActor::New();
> skin->SetMapper(skinMapper);
>
> // An outline provides context around the data.
> //
> vtkOutlineFilter *outlineData = vtkOutlineFilter::New();
> outlineData->SetInputConnection(v16->GetOutputPort());
> vtkPolyDataMapper *mapOutline = vtkPolyDataMapper::New();
> mapOutline->SetInputConnection(outlineData->GetOutputPort());
> vtkActor *outline = vtkActor::New();
> outline->SetMapper(mapOutline);
> outline->GetProperty()->SetColor(0,0,0);
>
> // It is convenient to create an initial view of the data. The FocalPoint
> // and Position form a vector direction. Later on (ResetCamera() method)
> // this vector is used to position the camera to look at the data in
> // this direction.
> vtkCamera *aCamera = vtkCamera::New();
> aCamera->SetViewUp (0, 0, -1);
> aCamera->SetPosition (0, 1, 0);
> aCamera->SetFocalPoint (0, 0, 0);
> aCamera->ComputeViewPlaneNormal();
>
> // Actors are added to the renderer. An initial camera view is created.
> // The Dolly() method moves the camera towards the FocalPoint,
> // thereby enlarging the image.
> aRenderer->AddActor(outline);
> aRenderer->AddActor(skin);
> aRenderer->SetActiveCamera(aCamera);
> aRenderer->ResetCamera ();
> aCamera->Dolly(1.5);
>
> // Set a background color for the renderer and set the size of the
> // render window (expressed in pixels).
> aRenderer->SetBackground(1,1,1);
> renWin->SetSize(640, 480);
>
> // Note that when camera movement occurs (as it does in the Dolly()
> // method), the clipping planes often need adjusting. Clipping planes
> // consist of two planes: near and far along the view direction. The
> // near plane clips out objects in front of the plane; the far plane
> // clips out objects behind the plane. This way only what is drawn
> // between the planes is actually rendered.
> aRenderer->ResetCameraClippingRange ();
>
> // Initialize the event loop and then start it.
> iren->Initialize();
> iren->Start();
>
> // It is important to delete all objects created previously to prevent
> // memory leaks. In this case, since the program is on its way to
> // exiting, it is not so important. But in applications it is
> // essential.
> v16->Delete();
> skinExtractor->Delete();
> skinNormals->Delete();
> skinMapper->Delete();
> skin->Delete();
> outlineData->Delete();
> mapOutline->Delete();
> outline->Delete();
> aCamera->Delete();
> iren->Delete();
> renWin->Delete();
> aRenderer->Delete();
>
> return 0;
> }
>
>
> Regards
> John
>
--
"The difference between school and life? In school, you're taught a lesson
and then given a test. In life, you're given a test that teaches you a
lesson."
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20090421/8c79e8d0/attachment.htm>
More information about the vtkusers
mailing list