找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 650|回复: 2

[VTK] VTK例子4-vtkLineWidget测量距离

[复制链接]

291

主题

401

回帖

2545

积分

管理员

积分
2545

热心会员推广达人优秀版主荣誉管理论坛元老

发表于 2015-12-4 22:22:18 | 显示全部楼层 |阅读模式
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[3],second[3];
      lineWidget->GetPoint1 (first);
      lineWidget->GetPoint2 (second);
      lineWidget->SetPoint1 (first[0],first[1],0);
      lineWidget->SetPoint2 (second[0],second[1],0);
      double length;
      length=sqrt((first[0]-second[0])*(first[0]-second[0])+
                   (first[1]-second[1])*(first[1]-second[1]));
      char cAct[100];
      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;
}

测量距离

测量距离
回复

使用道具 举报

135

主题

405

回帖

1457

积分

版主

积分
1457

热心会员推广达人优秀版主荣誉管理论坛元老

发表于 2016-5-12 18:04:27 | 显示全部楼层
学习学习一下
回复

使用道具 举报

161

主题

402

回帖

1505

积分

版主

积分
1505

热心会员推广达人优秀版主荣誉管理论坛元老

发表于 2016-5-15 08:11:41 | 显示全部楼层
好贴!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|关于我们|医维基|网站地图|Archiver|手机版|医疗之家 ( 沪ICP备2023001278号-1 )

GMT+8, 2025-4-11 08:04 , Processed in 0.419996 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表