Hello everyone~~<br>I want draw a recrangle dynamically with vtk ,<br>here is my way:<br>1,ceate a VtkPolydata and use it diaplay the rectangle<br>2,add the observer to the Interactor ,when the vtkCommand::LeftButtonPressEvent,LeftButtonReleaseEvent,MouseMoveEvent<br>happened call the command<br>3,in the execute() change the property of vtkpolydata and then render again<br>the main code is like below:<br><br>1 points = vtkPoints::New();<br> points->SetNumberOfPoints(4);<br> points->SetPoint(0,90,90,0);<br> points->SetPoint(1,90,120,0);<br> points->SetPoint(2,120,120,0);<br> points->SetPoint(3,120,90,0);<br> lines = vtkCellArray::New();<br> lines->InsertNextCell(5); <br> lines->InsertCellPoint(0); <br> lines->InsertCellPoint(1); <br> lines->InsertCellPoint(2); <br> lines->InsertCellPoint(3); <br> lines->InsertCellPoint(0); <br> polyData = vtkPolyData::New();<br> polyData->SetPoints(points);<br> polyData->SetLines(lines);<br> vtkPolyDataMapper* mapper = vtkPolyDataMapper::New();<br> mapper->SetInput(polyData);<br> vtkActor* rectActor = vtkActor::New();<br> rectActor->SetMapper(mapper);<br> rectActor->GetProperty()->SetColor( 1, 0, 0 ); <br> render->AddActor(rectActor);<br><br>2, MyInteractorCallback* m_pInteractorCallback = MyInteractorCallback::New();<br> iren->AddObserver( vtkCommand::LeftButtonPressEvent, m_pInteractorCallback);<br> iren->AddObserver( vtkCommand::LeftButtonReleaseEvent, m_pInteractorCallback);<br> iren->AddObserver( vtkCommand::MouseMoveEvent, m_pInteractorCallback);<br><br>3, virtual void Execute(vtkObject *caller, unsigned long eventId, void *callData)<br> {<br> if (eventId==vtkCommand::LeftButtonPressEvent)<br> {<br> vtkWin32RenderWindowInteractor *interactor = reinterpret_cast<vtkWin32RenderWindowInteractor *>(caller);<br> double x = interactor->GetEventPosition()[0];<br> double y = interactor->GetEventPosition()[1];<br> MyLeftButtonDownEvent(x,y);<br> }<br> else if(eventId==vtkCommand::LeftButtonReleaseEvent)<br> {<br> vtkWin32RenderWindowInteractor *interactor = reinterpret_cast<vtkWin32RenderWindowInteractor *>(caller);<br> double x = interactor->GetEventPosition()[0];<br> double y = interactor->GetEventPosition()[1];<br> MyLeftButtonUpEvent(x,y);<br> }<br> else if(eventId ==vtkCommand::MouseMoveEvent)<br> { <br> vtkWin32RenderWindowInteractor *interactor = reinterpret_cast<vtkWin32RenderWindowInteractor *>(caller);<br> double x = interactor->GetEventPosition()[0];<br> double y = interactor->GetEventPosition()[1];<br> MyMouseMoveEvent(x,y);<br> }<br> <br> }<br> void MyLeftButtonDownEvent(double x,double y)<br> {<br> rectable = 1;<br> x_lt = x;<br> y_lt = y;<br> points->SetPoint(0,x_lt,y_lt,0);<br><br> }<br> void MyLeftButtonUpEvent(double x,double y)<br> {<br><br> rectable =0;<br> <br> }<br> void MyMouseMoveEvent(double x,double y)<br> {<br> if (1 == rectable)<br> {<br> x_rb = x;<br> y_rb = y;<br> points->SetPoint(1,x_lt,y_rb,0);<br> points->SetPoint(2,x_rb,y_rb,0);<br> points->SetPoint(3,x_rb,y_lt,0);<br> <br> renWin->Render();<br> }<br> }<br>but the rectangle didn't changed as I wish,<br>I debug the code and find the point has been changed but the rectangle didn't changed.<br>can anyone solve this problem? thx ~~~<br>