<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">Hello Everyone<br>I am trying to get the location of a point picked by clicking the mouse on the render window. I tried to write a code for it. but nothing is happening. where will the locations of the picked point be displayed?<br><br>Pls Help<br>Rgds<br>Frency<br>Here is my code:-<br>#include <iostream><br>#include <fstream><br>#include <string><br>#include "vtkTextProperty.h"<br>#include "vtkTextMapper.h"<br>#include "vtkInteractorStyleTrackballCamera.h"<br>int MouseMotion;<br>#include "vtkCallbackCommand.h"<br>#include "vtkImageImport.h"<br>#include "vtkRenderWindowInteractor.h"<br>#include "vtkRenderer.h"<br>#include "vtkRenderWindow.h"<br>#include "vtkContourFilter.h"<br>#include "vtkPolyDataNormals.h"<br>#include "vtkPolyDataMapper.h"<br>#include "vtkActor.h"<br>#include "vtkOutlineFilter.h"<br>#include "vtkCamera.h"<br>#include
"vtkCommand.h"<br>#include "vtkCellPicker.h"<br>#include "vtkActor2D.h"<br>#include "vtkLabeledDataMapper.h"<br>vtkImageImport *Importer = vtkImageImport::New();<br>vtkContourFilter *skinExtractor = vtkContourFilter::New();<br>vtkPolyDataNormals *skinNormals = vtkPolyDataNormals::New();<br>vtkPolyDataMapper *skinMapper = vtkPolyDataMapper::New();<br>vtkActor *skin = vtkActor::New();<br>vtkRenderer *aRenderer = vtkRenderer::New();<br>vtkRenderWindow *renWin = vtkRenderWindow::New();<br>vtkCellPicker *picker = vtkCellPicker::New();<br><br>vtkActor2D *textActor;<br>vtkTextMapper *textMapper;<br>vtkRenderWindowInteractor *iren;<br><br>class PickCommand : public vtkCommand<br>{<br>public:<br><br> static PickCommand *New() { return new PickCommand; }<br> void Delete() { delete this; }<br><br> virtual void Execute(vtkObject *caller, unsigned long l, void *callData)<br>
{<br> cout<<"this is it"<< endl;<br> if (picker->GetCellId() < 0 )<br> {<br> textActor->VisibilityOff();<br> }<br> else<br> {<br><br> double selpt[3];<br> picker->GetSelectionPoint(selpt);<br> double x = selpt[0];<br> double y = selpt[1];<br> double
pickPos[3];<br> picker->GetPickPosition( pickPos );<br> double xp = pickPos[0];<br> double yp = pickPos[1];<br> double zp = pickPos[2];<br> cout<<zp<<endl;<br><br> char text[120];<br> sprintf( text, "(%5.5f, %5.5f, %5.5f)", xp, yp, zp );<br> textMapper->SetInput( text );<br> textActor->SetPosition(10,
10);<br> textActor->VisibilityOn();<br><br> }<br><br> renWin->Render();<br> }<br>};<br><br><br><br> // No. of iterations to be done//<br>int x_max=54;<br>int y_max=47;<br>int z_max=63;<br>const int x_neigh=50000;<br>const int y_neigh=50000;<br>const int z_neigh=50000;<br>int count_vv;<br><br>//**reading image into an array**//<br><br>int x,y,z;<br><br><br>unsigned short* ImageArray= new unsigned short[x_max*y_max*z_max];<br><br>using namespace std;<br><br>//*****Main program starts****//<br>int main()<br><br> {<br><br><br> int x;<br> int y;<br> int z;<br><br>//**reading the .raw image into and array **//<br><br> ifstream inputFile;<br>
inputFile.open("/home/owner/Desktop/iteration/15s.raw",ios::binary);<br> for(z=0; z<z_max; z++)<br> {<br> for(y=0; y<y_max; y++)<br> {<br> for(x=0; x<x_max; x++)<br> {<br> inputFile.read((char*) &(ImageArray[z*x_max*y_max+y*x_max+x]),2);<br><br> }<br><br> }<br> }<br><br><br><br> //** Create the renderer, the render window, and the
interactor.**//<br> //** The renderer draws into the render window, the interactor keyboard-based interaction with the data within the render window.**//<br><br>//cout<<"this is it"<< endl;<br> renWin->AddRenderer(aRenderer);<br> vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();<br> iren->SetRenderWindow(renWin);<br><br>//**using image import class the inmage in the array is moved into the buffer**//<br><br> Importer->SetDataExtent(0, 53, 0, 46, 0, 62);<br> Importer->SetWholeExtent(0, 53, 0, 46, 0, 62);<br> Importer->SetDataSpacing(1.0,1.0,1.0);<br> Importer->SetNumberOfScalarComponents(1);<br> Importer->SetDataScalarTypeToUnsignedShort();<br>
Importer->SetImportVoidPointer(ImageArray);<br>// An isosurface, or contour value of 100 is known to correspond to the<br> //inner surface. Once generated, a vtkPolyDataNormals filter is<br> // is used to create normals for smooth surface shading during rendering.<br><br> skinExtractor->SetInputConnection(Importer->GetOutputPort());<br> skinExtractor->SetValue(0,109);<br><br> vtkPolyDataNormals *skinNormals = vtkPolyDataNormals::New();<br> skinNormals->SetInputConnection(skinExtractor->GetOutputPort());<br> skinNormals->SetFeatureAngle(60);<br><br> skinMapper->SetInputConnection(skinNormals->GetOutputPort());<br> skinMapper->ScalarVisibilityOff();<br> skin->SetMapper(skinMapper);<br><br><br>
vtkCallbackCommand *pickerCommand = vtkCallbackCommand::New();<br> PickCommand* pickObserver = PickCommand::New();<br><br><br> aRenderer->SetBackground(1.5, 1.5, 1.5);<br><br><br> vtkCamera *aCamera = vtkCamera::New();<br> aCamera->SetViewUp (0, 0, -1);<br> aCamera->SetPosition (0, 1, 0);<br> aCamera->SetFocalPoint (0, 0, 0);<br> aCamera->ComputeViewPlaneNormal();<br><br><br><br> aRenderer->AddActor(skin);<br> aRenderer->SetActiveCamera(aCamera);<br> aRenderer->ResetCamera ();<br> aCamera->Dolly(1.5);<br><br><br>//** defining the vtk windowinteractor**//<br> iren =vtkRenderWindowInteractor::New();<br>
iren->SetRenderWindow(renWin);<br> renWin->Render();<br> renWin->SetSize(500, 500 );<br><br><br><br> iren->Initialize();<br><br><br> iren->Start();<br><br>//**delete all objects created previously to preventmemory leaks**//<br><br>picker->RemoveObserver( pickObserver );<br> picker->Delete();<br> textMapper->Delete();<br> textActor->Delete();<br> pickerCommand->Delete();<br>// style->Delete();<br><br>pickObserver->Delete();<br>inputFile.close();<br> //picker->Delete();<br> Importer->Delete();<br> skinExtractor->Delete();<br> skinMapper->Delete();<br> skin->Delete();<br>
aCamera->Delete();<br> renWin->Delete();<br> aRenderer->Delete();<br> return 0;<br> }<br><br><br><br><br></td></tr></table><br>