VTK例子4-vtkLineWidget测量距离
vtkLineWidget测量距离#include "stdafx.h"#include "vtkActor.h"#include "vtkCommand.h"#include "vtkInteractorEventRecorder.h"#include "vtkLineWidget.h"#include "vtkDICOMImageReader.h"#include "vtkRenderWindowInteractor.h"#include <vtkImageMapper.h>#include <vtkImageData.h>#include <vtkDICOMImageReader.h>#include <vtkActor2D.h>#include <vtkRenderer.h>#include <vtkRenderWindow.h>#include <vtkImageActor.h>#include <vtkImageShiftScale.h>#include <vtkProperty.h>#include <vtkTextActor.h>#include <math.h>#include <string.h>class vtkLWCallback : public vtkCommand{public:static vtkLWCallback *New() { return new vtkLWCallback; }virtual void Execute(vtkObject *caller, unsigned long, void*) { vtkLineWidget *lineWidget = reinterpret_cast<vtkLineWidget*>(caller); this->Actor->VisibilityOn(); double first,second; lineWidget->GetPoint1 (first); lineWidget->GetPoint2 (second); lineWidget->SetPoint1 (first,first,0); lineWidget->SetPoint2 (second,second,0); double length; length=sqrt((first-second)*(first-second)+ (first-second)*(first-second)); char cAct; sprintf((char *)cAct,"%.4f mm",length);//将length传给cAct this->TextActor->SetInput (cAct); }vtkLWCallback():Actor(0),TextActor(0) {}vtkImageActor *Actor;vtkTextActor *TextActor;};int main( int argc, char *argv[] ){ vtkDICOMImageReader* reader = vtkDICOMImageReader::New(); reader->SetFileName("C://DATADIR/brain/brain_008.dcm"); reader->SetDataByteOrderToLittleEndian(); reader->Update(); vtkImageMapper* mapper = vtkImageMapper::New(); mapper->SetInput(reader->GetOutput()); mapper->SetColorLevel(127); mapper->SetColorWindow(255); vtkImageShiftScale *ShiftScale = vtkImageShiftScale::New(); ShiftScale->SetInput((vtkDataObject *)reader->GetOutput()); ShiftScale->SetOutputScalarTypeToUnsignedChar();// ShiftScale->SetShift (1024); ShiftScale->ClampOverflowOn(); ShiftScale->Update(); vtkImageActor* actor = vtkImageActor::New(); actor->SetInput(ShiftScale->GetOutput()); vtkTextActor *mmm=vtkTextActor::New(); mmm->SetDisplayPosition(100, 10 );//设定注释位置 mmm->SetInput("hello!");vtkRenderer *ren1 = vtkRenderer::New(); vtkRenderWindow *renWin = vtkRenderWindow::New(); renWin->AddRenderer(ren1);vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New(); iren->SetRenderWindow(renWin);vtkLWCallback *myCallback = vtkLWCallback::New(); myCallback->Actor = actor; myCallback->TextActor = mmm;vtkLineWidget *lineWidget = vtkLineWidget::New(); lineWidget->SetInteractor(iren); lineWidget->SetInput(reader->GetOutput()); lineWidget->SetAlignToYAxis(); lineWidget->PlaceWidget(); lineWidget->GetLineProperty()->SetColor(1,0,0); lineWidget->GetHandleProperty()->SetColor(0,1,0); lineWidget->AddObserver(vtkCommand::InteractionEvent,myCallback);ren1->AddActor(actor);ren1->AddActor(mmm);//显示注释文字// Add the actors to the renderer, set the background and size//ren1->SetBackground(0.1, 0.2, 0.4);renWin->SetSize(600, 600);ren1->InteractiveOff();iren->Initialize();renWin->Render();iren->SetKeyCode('i');iren->InvokeEvent(vtkCommand::CharEvent,NULL);ren1->InteractiveOff();// Remove the observers so we can go interactive. Without this the "-I"// testing option fails.iren->Start();myCallback->Delete();lineWidget->Delete();iren->Delete();renWin->Delete();ren1->Delete();return 0;} 学习学习一下 好贴!!!
页:
[1]