//移动立方体2#include "vtkDICOMImageReader.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkMarchingCubes.h"
#include "vtkStripper.h"
#include "vtkActor.h"
#include "vtkPolyDataMapper.h"
#include "vtkProperty.h"
#include "vtkCamera.h"
#include "vtkBoxWidget.h"#include <iostream>int main()
{vtkDICOMImageReader   *reader =  vtkDICOMImageReader::New();reader->SetDataByteOrderToLittleEndian();//设置图像数据的字端序转换成小字端序reader->SetDirectoryName("D://DicomImages/SE0/");reader->SetDataSpacing(1.0,1.0,0.48);//设置图像像素间距和序列间距//抽取等值面为骨头的信息vtkMarchingCubes *boneExtractor = vtkMarchingCubes::New();boneExtractor->SetInputConnection(reader->GetOutputPort());boneExtractor->SetValue(0,-500); //设置提取的等值信息//boneExtractor->SetValue(1,333);//剔除旧的或废除的数据单元,提高绘制速度vtkStripper *boneStripper = vtkStripper::New(); //三角带连接boneStripper->SetInputConnection(boneExtractor->GetOutputPort());//建立映射vtkPolyDataMapper *boneMapper = vtkPolyDataMapper::New();boneMapper->SetInput(boneStripper->GetOutput());boneMapper->ScalarVisibilityOff(); //---------------------2====================////抽取等值面为骨头的信息vtkMarchingCubes *boneExtractor2 = vtkMarchingCubes::New();boneExtractor2->SetInputConnection(reader->GetOutputPort());//boneExtractor->SetValue(0,-500); //设置提取的等值信息boneExtractor2->SetValue(0,333);//剔除旧的或废除的数据单元,提高绘制速度vtkStripper *boneStripper2 = vtkStripper::New(); //三角带连接boneStripper2->SetInputConnection(boneExtractor2->GetOutputPort());//建立映射vtkPolyDataMapper *boneMapper2 = vtkPolyDataMapper::New();boneMapper2->SetInput(boneStripper2->GetOutput());boneMapper2->ScalarVisibilityOff(); //建立角色vtkActor *bone2 = vtkActor::New();bone2->SetMapper(boneMapper2);bone2->GetProperty()->SetDiffuseColor(1,0,0);//(.1,.94,.52);bone2->GetProperty()->SetSpecular(1);bone2->GetProperty()->SetSpecularPower(20);bone2->GetProperty()->SetOpacity(0.2) ;
//-----------------------------------------////建立角色vtkActor *bone = vtkActor::New();bone->SetMapper(boneMapper);bone->GetProperty()->SetDiffuseColor(1,1,1);//(.1,.94,.52);bone->GetProperty()->SetSpecular(.3);bone->GetProperty()->SetSpecularPower(20);bone->GetProperty()->SetOpacity(0.2) ;//标准句子//定义绘制器vtkRenderer *aRenderer = vtkRenderer::New();//定义绘制窗口vtkRenderWindow *renWin = vtkRenderWindow::New();renWin->AddRenderer(aRenderer);renWin->SetSize(600,600) ;//定义窗口交互器vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();iren->SetRenderWindow(renWin);//创建一个cameravtkCamera *aCamera = vtkCamera::New();aCamera->SetViewUp(0,0,-1);aCamera->SetPosition(0,1,0);aCamera->SetFocalPoint(0,0,0);aRenderer->AddActor(bone);aRenderer->AddActor(bone2);aRenderer->SetActiveCamera(aCamera);aRenderer->ResetCamera();aCamera->Dolly(1.5);aRenderer->SetBackground(0,0,0);aRenderer->ResetCameraClippingRange();//vtkBoxWidget *boxWidget = vtkBoxWidget::New();//boxWidget->SetInteractor(iren);//boxWidget->SetPlaceFactor(1.25);////boxWidget->SetProp3D(bone);//boxWidget->PlaceWidget();iren->Initialize();iren->Start();reader->Delete();iren->Delete();return 0;
}

效果:

//移动立方体2#include "vtkDICOMImageReader.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkMarchingCubes.h"
#include "vtkStripper.h"
#include "vtkActor.h"
#include "vtkPolyDataMapper.h"
#include "vtkProperty.h"
#include "vtkCamera.h"
#include "vtkBoxWidget.h"#include <iostream>int main()
{vtkDICOMImageReader   *reader =  vtkDICOMImageReader::New();reader->SetDataByteOrderToLittleEndian();//设置图像数据的字端序转换成小字端序reader->SetDirectoryName("D://DicomImages/SE0/");reader->SetDataSpacing(1.0,1.0,0.48);//设置图像像素间距和序列间距//抽取等值面为骨头的信息vtkMarchingCubes *boneExtractor = vtkMarchingCubes::New();boneExtractor->SetInputConnection(reader->GetOutputPort());boneExtractor->SetValue(0,-500); //设置提取的等值信息//boneExtractor->SetValue(1,333);//剔除旧的或废除的数据单元,提高绘制速度vtkStripper *boneStripper = vtkStripper::New(); //三角带连接boneStripper->SetInputConnection(boneExtractor->GetOutputPort());//建立映射vtkPolyDataMapper *boneMapper = vtkPolyDataMapper::New();boneMapper->SetInput(boneStripper->GetOutput());boneMapper->ScalarVisibilityOff(); //---------------------面2====================////抽取等值面为骨头的信息vtkMarchingCubes *boneExtractor2 = vtkMarchingCubes::New();boneExtractor2->SetInputConnection(reader->GetOutputPort());//boneExtractor->SetValue(0,-500); //设置提取的等值信息boneExtractor2->SetValue(0,333);//剔除旧的或废除的数据单元,提高绘制速度vtkStripper *boneStripper2 = vtkStripper::New(); //三角带连接boneStripper2->SetInputConnection(boneExtractor2->GetOutputPort());//建立映射vtkPolyDataMapper *boneMapper2 = vtkPolyDataMapper::New();boneMapper2->SetInput(boneStripper2->GetOutput());boneMapper2->ScalarVisibilityOff(); //建立角色vtkActor *bone2 = vtkActor::New();bone2->SetMapper(boneMapper2);bone2->GetProperty()->SetDiffuseColor(255,0,255);//(.1,.94,.52);bone2->GetProperty()->SetSpecular(1);bone2->GetProperty()->SetSpecularPower(20);bone2->GetProperty()->SetOpacity(0.2) ;
//---------------------------------------////---------------------面3====================////抽取等值面为骨头的信息vtkMarchingCubes *boneExtractor3 = vtkMarchingCubes::New();boneExtractor3->SetInputConnection(reader->GetOutputPort());//boneExtractor->SetValue(0,-500); //设置提取的等值信息boneExtractor3->SetValue(0,750);//剔除旧的或废除的数据单元,提高绘制速度vtkStripper *boneStripper3 = vtkStripper::New(); //三角带连接boneStripper3->SetInputConnection(boneExtractor3->GetOutputPort());//建立映射vtkPolyDataMapper *boneMapper3 = vtkPolyDataMapper::New();boneMapper3->SetInput(boneStripper3->GetOutput());boneMapper3->ScalarVisibilityOff(); //建立角色vtkActor *bone3 = vtkActor::New();bone3->SetMapper(boneMapper3);bone3->GetProperty()->SetDiffuseColor(0,0,255);//(.1,.94,.52);bone3->GetProperty()->SetSpecular(0.6);bone3->GetProperty()->SetSpecularPower(20);bone3->GetProperty()->SetOpacity(0.2) ;
//---------------------------------------////建立角色vtkActor *bone = vtkActor::New();bone->SetMapper(boneMapper);bone->GetProperty()->SetDiffuseColor(1,1,1);//(.1,.94,.52);bone->GetProperty()->SetSpecular(.3);bone->GetProperty()->SetSpecularPower(20);bone->GetProperty()->SetOpacity(0.2) ;//标准句子//定义绘制器vtkRenderer *aRenderer = vtkRenderer::New();//定义绘制窗口vtkRenderWindow *renWin = vtkRenderWindow::New();renWin->AddRenderer(aRenderer);renWin->SetSize(600,600) ;//定义窗口交互器vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();iren->SetRenderWindow(renWin);//创建一个cameravtkCamera *aCamera = vtkCamera::New();aCamera->SetViewUp(0,0,-1);aCamera->SetPosition(0,1,0);aCamera->SetFocalPoint(0,0,0);aRenderer->AddActor(bone);aRenderer->AddActor(bone2);aRenderer->AddActor(bone3);aRenderer->SetActiveCamera(aCamera);aRenderer->ResetCamera();aCamera->Dolly(1.5);aRenderer->SetBackground(0,0,0);aRenderer->ResetCameraClippingRange();//vtkBoxWidget *boxWidget = vtkBoxWidget::New();//boxWidget->SetInteractor(iren);//boxWidget->SetPlaceFactor(1.25);////boxWidget->SetProp3D(bone);//boxWidget->PlaceWidget();iren->Initialize();iren->Start();reader->Delete();iren->Delete();return 0;
}

效果:


加入点集版本:

//移动立方体2#include "vtkDICOMImageReader.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkMarchingCubes.h"
#include "vtkStripper.h"
#include "vtkActor.h"
#include "vtkPolyDataMapper.h"
#include "vtkProperty.h"
#include "vtkCamera.h"
#include "vtkBoxWidget.h"
//---------------------------//
#include <iostream>
#include <vector>
#include "vtkActor.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkProperty.h"
#include "vtkInteractorStyleTrackballCamera.h"
#include "vtkPoints.h"
#include "vtkPolyVertex.h"
#include "vtkUnstructuredGrid.h"
#include "vtkDataSetMapper.h"
#include "vtkPolyData.h"
#include "vtkCellArray.h"
#include "vtkInteractorStyleTrackball.h"
#include "vtkPolyDataMapper.h"
//--------------------------//
#include <vtkSmartPointer.h>
#include <vtkImageData.h>
#include <vtkStructuredPoints.h>
#include <vtkStructuredPointsReader.h>
#include <vtkVolumeTextureMapper3D.h>
#include <vtkColorTransferFunction.h>
#include <vtkPiecewiseFunction.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkVolumeProperty.h>
#include <vtkAxesActor.h>
#include <vtkImageShiftScale.h>
#include <vtkImageCast.h>
//---------------------------//
#include <iostream>int main()
{vtkDICOMImageReader   *reader =  vtkDICOMImageReader::New();reader->SetDataByteOrderToLittleEndian();//设置图像数据的字端序转换成小字端序reader->SetDirectoryName("D://DicomImages/SE0/");reader->SetDataSpacing(1.0,1.0,0.48);//设置图像像素间距和序列间距//抽取等值面为骨头的信息vtkMarchingCubes *boneExtractor = vtkMarchingCubes::New();boneExtractor->SetInputConnection(reader->GetOutputPort());boneExtractor->SetValue(0,-500); //设置提取的等值信息//boneExtractor->SetValue(1,333);//剔除旧的或废除的数据单元,提高绘制速度vtkStripper *boneStripper = vtkStripper::New(); //三角带连接boneStripper->SetInputConnection(boneExtractor->GetOutputPort());//建立映射vtkPolyDataMapper *boneMapper = vtkPolyDataMapper::New();boneMapper->SetInput(boneStripper->GetOutput());boneMapper->ScalarVisibilityOff(); //---------------------面2====================////抽取等值面为骨头的信息vtkMarchingCubes *boneExtractor2 = vtkMarchingCubes::New();boneExtractor2->SetInputConnection(reader->GetOutputPort());//boneExtractor->SetValue(0,-500); //设置提取的等值信息boneExtractor2->SetValue(0,333);//剔除旧的或废除的数据单元,提高绘制速度vtkStripper *boneStripper2 = vtkStripper::New(); //三角带连接boneStripper2->SetInputConnection(boneExtractor2->GetOutputPort());//建立映射vtkPolyDataMapper *boneMapper2 = vtkPolyDataMapper::New();boneMapper2->SetInput(boneStripper2->GetOutput());boneMapper2->ScalarVisibilityOff(); //建立角色vtkActor *bone2 = vtkActor::New();bone2->SetMapper(boneMapper2);bone2->GetProperty()->SetDiffuseColor(255,0,255);//(.1,.94,.52);bone2->GetProperty()->SetSpecular(1);bone2->GetProperty()->SetSpecularPower(20);bone2->GetProperty()->SetOpacity(0.2) ;
//---------------------------------------////---------------------面3====================////抽取等值面为骨头的信息vtkMarchingCubes *boneExtractor3 = vtkMarchingCubes::New();boneExtractor3->SetInputConnection(reader->GetOutputPort());//boneExtractor->SetValue(0,-500); //设置提取的等值信息boneExtractor3->SetValue(0,750);//剔除旧的或废除的数据单元,提高绘制速度vtkStripper *boneStripper3 = vtkStripper::New(); //三角带连接boneStripper3->SetInputConnection(boneExtractor3->GetOutputPort());//建立映射vtkPolyDataMapper *boneMapper3 = vtkPolyDataMapper::New();boneMapper3->SetInput(boneStripper3->GetOutput());boneMapper3->ScalarVisibilityOff(); //建立角色vtkActor *bone3 = vtkActor::New();bone3->SetMapper(boneMapper3);bone3->GetProperty()->SetDiffuseColor(0,0,255);//(.1,.94,.52);bone3->GetProperty()->SetSpecular(0.6);bone3->GetProperty()->SetSpecularPower(20);bone3->GetProperty()->SetOpacity(0.2) ;
//---------------------------------------//
//--------------------添加点云---------------------------//
vtkSmartPointer<vtkPoints> m_Points = vtkSmartPointer<vtkPoints>::New();
vtkSmartPointer<vtkCellArray> vertices =vtkSmartPointer<vtkCellArray>::New();   //_存放细胞顶点,用于渲染(显示点云所必须的)
vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();
vtkSmartPointer<vtkPolyDataMapper> pointMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
vtkSmartPointer<vtkActor> pointActor = vtkSmartPointer<vtkActor>::New();m_Points->InsertPoint(0,150,150,150);
vertices->InsertNextCell(1);     //_加入细胞顶点信息----用于渲染点集
vertices->InsertCellPoint(0);
//_创建待显示数据源
polyData->SetPoints(m_Points);       //_设置点集
polyData->SetVerts(vertices);        //_设置渲染顶点
pointMapper->SetInput( polyData );
pointActor->SetMapper( pointMapper );
pointActor->GetProperty()->SetColor(0.0,1.0,0.0);
pointActor->GetProperty()->SetAmbient(0.8);
pointActor->GetProperty()->SetPointSize(8);
//------------------------------------------------------////建立角色vtkActor *bone = vtkActor::New();bone->SetMapper(boneMapper);bone->GetProperty()->SetDiffuseColor(1,1,1);//(.1,.94,.52);bone->GetProperty()->SetSpecular(.3);bone->GetProperty()->SetSpecularPower(20);bone->GetProperty()->SetOpacity(0.2) ;//标准句子//定义绘制器vtkRenderer *aRenderer = vtkRenderer::New();//定义绘制窗口vtkRenderWindow *renWin = vtkRenderWindow::New();renWin->AddRenderer(aRenderer);renWin->SetSize(600,600) ;//定义窗口交互器vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();iren->SetRenderWindow(renWin);//创建一个cameravtkCamera *aCamera = vtkCamera::New();aCamera->SetViewUp(0,0,-1);aCamera->SetPosition(0,1,0);aCamera->SetFocalPoint(0,0,0);aRenderer->AddActor(bone);aRenderer->AddActor(bone2);aRenderer->AddActor(bone3);aRenderer->AddActor(pointActor);aRenderer->SetActiveCamera(aCamera);aRenderer->ResetCamera();aCamera->Dolly(1.5);aRenderer->SetBackground(0,0,0);aRenderer->ResetCameraClippingRange();//vtkBoxWidget *boxWidget = vtkBoxWidget::New();//boxWidget->SetInteractor(iren);//boxWidget->SetPlaceFactor(1.25);////boxWidget->SetProp3D(bone);//boxWidget->PlaceWidget();iren->Initialize();iren->Start();//m_Points->SetPoint(0, 0, 600, 0);    //更新顶点坐标//m_Points->Modified();renWin->Render();//iren->GetRenderWindow()->Render();reader->Delete();iren->Delete();return 0;
}


实时跟踪点:

//移动立方体2#include "vtkDICOMImageReader.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkMarchingCubes.h"
#include "vtkStripper.h"
#include "vtkActor.h"
#include "vtkPolyDataMapper.h"
#include "vtkProperty.h"
#include "vtkCamera.h"
#include "vtkBoxWidget.h"
//---------------------------//
#include <iostream>
#include <vector>
#include "vtkInteractorStyleTrackballCamera.h"
#include "vtkPoints.h"
#include "vtkPolyVertex.h"
#include "vtkUnstructuredGrid.h"
#include "vtkDataSetMapper.h"
#include "vtkPolyData.h"
#include "vtkCellArray.h"
#include "vtkInteractorStyleTrackball.h"
#include "vtkPolyDataMapper.h"
//--------------------------//
#include <vtkSmartPointer.h>
#include <vtkImageData.h>
#include <vtkStructuredPoints.h>
#include <vtkStructuredPointsReader.h>
#include <vtkVolumeTextureMapper3D.h>
#include <vtkColorTransferFunction.h>
#include <vtkPiecewiseFunction.h>
#include <vtkVolumeProperty.h>
#include <vtkAxesActor.h>
#include <vtkImageShiftScale.h>
#include <vtkImageCast.h>
//---------------------------//
#include <iostream>//-------------回调--------------//
#include <vtkRenderWindowInteractor.h>
#include <vtkCallbackCommand.h>
//-----------------------------//
long pressCounts = 0;
//vtkSmartPointer<vtkPoints> m_Points = vtkSmartPointer<vtkPoints>::New();
//vtkSmartPointer<vtkCellArray> vertices =vtkSmartPointer<vtkCellArray>::New();   //_存放细胞顶点,用于渲染(显示点云所必须的)
//vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();
//vtkSmartPointer<vtkPolyDataMapper> pointMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
//vtkSmartPointer<vtkActor> pointActor = vtkSmartPointer<vtkActor>::New();
//
//vtkRenderWindow *renWin = vtkRenderWindow::New();
//第一步,定义回调函数。注意回调函数的签名,不能更改。
//  void MyCallbackFunc(vtkObject*, unsigned long eid, void* clientdata, void *calldata)
//{//  std::cout<<"You have clicked: "<<++pressCounts<<" times."<<std::endl;
//  //m_Points->SetPoint(0, 0, 600, pressCounts*5);    //更新顶点坐标
//  //m_Points->Modified();
//  //renWin->Render();
//  //iren->GetRenderWindow()->Render();
//}
//第一步
//class vtkMyCommand : public vtkCommand
//{//public:
//    static vtkMyCommand *New()
//    {//        return new vtkMyCommand;
//    }
//
//    void SetObject(vtkPoints* Points)
//    {//        n_Points = Points;
//    }
//
//    virtual void Execute(vtkObject *caller, unsigned long eventId, void* callData)
//    {//  std::cout<<"You have clicked: "<<++pressCounts<<" times."<<std::endl;
//  m_Points->SetPoint(0, 0, 600, pressCounts*5);    //更新顶点坐标
//  m_Points->Modified();
//      renWin->Render();
//    }
//
//private:
//    vtkPoints* n_Points;
//};=====================================================//class ShowPointCallback : public vtkCommand
{public:static ShowPointCallback *New() //回调函数初始化函数{return new ShowPointCallback;}ShowPointCallback(){this->M_Points=0;this->Interactor = 0;}void SetPoints(vtkPoints * Points){this->M_Points = Points;}vtkPoints *GetPoints(){return this->M_Points;}void SetInteractor(vtkRenderWindowInteractor *interactor){this->Interactor = interactor;}vtkRenderWindowInteractor *GetInteractor(){return  this->Interactor;}virtual void Execute(vtkObject * ,unsigned long event,void *){std::cout<<"You have clicked: "<<++pressCounts<<" times."<<std::endl;vtkPoints * new_Points =GetPoints();new_Points->SetPoint(0, 0, 600, pressCounts*5);new_Points->Modified();vtkRenderWindowInteractor *interactor = GetInteractor();interactor->Render();}
private://int Slicing;//vtkImageReslice *ImageReslice;vtkRenderWindowInteractor *Interactor;vtkPoints * M_Points;
};
//**********************************************************************************//
int main()
{vtkDICOMImageReader   *reader =  vtkDICOMImageReader::New();reader->SetDataByteOrderToLittleEndian();//设置图像数据的字端序转换成小字端序reader->SetDirectoryName("D://DicomImages/SE0/");reader->SetDataSpacing(1.0,1.0,0.48);//设置图像像素间距和序列间距//抽取等值面为骨头的信息vtkMarchingCubes *boneExtractor = vtkMarchingCubes::New();boneExtractor->SetInputConnection(reader->GetOutputPort());boneExtractor->SetValue(0,-500); //设置提取的等值信息//boneExtractor->SetValue(1,333);//剔除旧的或废除的数据单元,提高绘制速度vtkStripper *boneStripper = vtkStripper::New(); //三角带连接boneStripper->SetInputConnection(boneExtractor->GetOutputPort());//建立映射vtkPolyDataMapper *boneMapper = vtkPolyDataMapper::New();boneMapper->SetInput(boneStripper->GetOutput());boneMapper->ScalarVisibilityOff(); //---------------------面2====================////抽取等值面为骨头的信息vtkMarchingCubes *boneExtractor2 = vtkMarchingCubes::New();boneExtractor2->SetInputConnection(reader->GetOutputPort());//boneExtractor->SetValue(0,-500); //设置提取的等值信息boneExtractor2->SetValue(0,333);//剔除旧的或废除的数据单元,提高绘制速度vtkStripper *boneStripper2 = vtkStripper::New(); //三角带连接boneStripper2->SetInputConnection(boneExtractor2->GetOutputPort());//建立映射vtkPolyDataMapper *boneMapper2 = vtkPolyDataMapper::New();boneMapper2->SetInput(boneStripper2->GetOutput());boneMapper2->ScalarVisibilityOff(); //建立角色vtkActor *bone2 = vtkActor::New();bone2->SetMapper(boneMapper2);bone2->GetProperty()->SetDiffuseColor(255,0,255);//(.1,.94,.52);bone2->GetProperty()->SetSpecular(1);bone2->GetProperty()->SetSpecularPower(20);bone2->GetProperty()->SetOpacity(0.2) ;
//---------------------------------------////---------------------面3====================////抽取等值面为骨头的信息vtkMarchingCubes *boneExtractor3 = vtkMarchingCubes::New();boneExtractor3->SetInputConnection(reader->GetOutputPort());//boneExtractor->SetValue(0,-500); //设置提取的等值信息boneExtractor3->SetValue(0,750);//剔除旧的或废除的数据单元,提高绘制速度vtkStripper *boneStripper3 = vtkStripper::New(); //三角带连接boneStripper3->SetInputConnection(boneExtractor3->GetOutputPort());//建立映射vtkPolyDataMapper *boneMapper3 = vtkPolyDataMapper::New();boneMapper3->SetInput(boneStripper3->GetOutput());boneMapper3->ScalarVisibilityOff(); //建立角色vtkActor *bone3 = vtkActor::New();bone3->SetMapper(boneMapper3);bone3->GetProperty()->SetDiffuseColor(0,0,255);//(.1,.94,.52);bone3->GetProperty()->SetSpecular(0.6);bone3->GetProperty()->SetSpecularPower(20);bone3->GetProperty()->SetOpacity(0.2) ;
//---------------------------------------//
//--------------------添加点云---------------------------////声明设为全局
vtkSmartPointer<vtkPoints> m_Points = vtkSmartPointer<vtkPoints>::New();
vtkSmartPointer<vtkCellArray> vertices =vtkSmartPointer<vtkCellArray>::New();   //_存放细胞顶点,用于渲染(显示点云所必须的)
vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();
vtkSmartPointer<vtkPolyDataMapper> pointMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
vtkSmartPointer<vtkActor> pointActor = vtkSmartPointer<vtkActor>::New();m_Points->InsertPoint(0,150,150,150);
vertices->InsertNextCell(1);     //_加入细胞顶点信息----用于渲染点集
vertices->InsertCellPoint(0);
//_创建待显示数据源
polyData->SetPoints(m_Points);       //_设置点集
polyData->SetVerts(vertices);        //_设置渲染顶点
pointMapper->SetInput( polyData );
pointActor->SetMapper( pointMapper );
pointActor->GetProperty()->SetColor(0.0,1.0,0.0);
pointActor->GetProperty()->SetAmbient(0.8);
pointActor->GetProperty()->SetPointSize(8);
//------------------------------------------------------////建立角色vtkActor *bone = vtkActor::New();bone->SetMapper(boneMapper);bone->GetProperty()->SetDiffuseColor(1,1,1);//(.1,.94,.52);bone->GetProperty()->SetSpecular(.3);bone->GetProperty()->SetSpecularPower(20);bone->GetProperty()->SetOpacity(0.2) ;//标准句子//定义绘制器vtkRenderer *aRenderer = vtkRenderer::New();//定义绘制窗口vtkRenderWindow *renWin = vtkRenderWindow::New();//声明设为全局renWin->AddRenderer(aRenderer);renWin->SetSize(600,600) ;//第二步,设置回调函数。/*vtkSmartPointer<vtkCallbackCommand> mouseCallback = vtkSmartPointer<vtkCallbackCommand>::New();mouseCallback->SetCallback ( MyCallbackFunc );*///第二步/*vtkSmartPointer<vtkMyCommand> callback = vtkSmartPointer<vtkMyCommand>::New();callback->SetObject(m_Points);
*///定义窗口交互器vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();iren->SetRenderWindow(renWin);//第三步,将vtkCallbackCommand对象添加到观察者列表。//iren->SetRenderWindow(polyData->GetRenderWindow());/*iren->AddObserver(vtkCommand::LeftButtonPressEvent, mouseCallback);*///interactor->Initialize();///interactor->Start();/*iren->AddObserver(vtkCommand::LeftButtonPressEvent, callback);*///创建一个cameravtkCamera *aCamera = vtkCamera::New();aCamera->SetViewUp(0,0,-1);aCamera->SetPosition(0,1,0);aCamera->SetFocalPoint(0,0,0);aRenderer->AddActor(bone);aRenderer->AddActor(bone2);aRenderer->AddActor(bone3);aRenderer->AddActor(pointActor);aRenderer->SetActiveCamera(aCamera);aRenderer->ResetCamera();aCamera->Dolly(1.5);aRenderer->SetBackground(0,0,0);aRenderer->ResetCameraClippingRange();//vtkBoxWidget *boxWidget = vtkBoxWidget::New();//boxWidget->SetInteractor(iren);//boxWidget->SetPlaceFactor(1.25);////boxWidget->SetProp3D(bone);//boxWidget->PlaceWidget();iren->Initialize();//****************建立 观察者-命令 模式****************//vtkSmartPointer<ShowPointCallback> callback =vtkSmartPointer<ShowPointCallback>::New();callback->SetPoints(m_Points);callback->SetInteractor(iren);iren->AddObserver(vtkCommand::LeftButtonPressEvent, callback);//iren->Start();//-------------------------------------------------------//iren->Start();//m_Points->SetPoint(0, 0, 600, 0);    //更新顶点坐标//m_Points->Modified();renWin->Render();//iren->GetRenderWindow()->Render();reader->Delete();iren->Delete();return 0;
}

VTK移动立方体法创建多个等值面的透视3D模型相关推荐

  1. unity创建一个6面体的3D模型,确保它每一个面都是不同的。能旋转每一个面唤醒不同的物品

    文章目录 前言 unity创建一个6面体的3D模型,确保它每一个面都是不同的.能旋转每一个面唤醒不同的物品 一.物体每一面旋转停止呼出不同面板 二.使用步骤 1.控制旋转与唤醒 总结 前言 unity ...

  2. VTK从分割好的体数据获取等值面的方法(MarchingCube)

    vtk里面从分割好的体数据获取等值面的方法基本上都是基于MarchingCube的方法,有很多相关函数,一般从标记图像中获取等值面的方法为vtkDiscreteMarchingCubes.图像经过等值 ...

  3. Three.js的学习之路(一丶创建项目/画出第一个3D模型)

    前言: 最近有点无聊,学学three.js,记录一下学习过程,随便给大家避避坑. 我的目标是完成一个室内设计预览的效果(下图),任重而道远啊,最后能不能坚持下去也不知道,不一定有这么多时间去搞,拭目以 ...

  4. 关于创建和替换STK软件的3D模型图方法及其介绍

    1.替换STK 3D模型 当我们在使用STK软件时,创建例如卫星的飞行器等,可以在STK界面修改卫星默认的模型形状如下图所示: 卫星默认形状 在properties中下拉找到Model 其中Moder ...

  5. 数据结构之单链表尾插法创建-RearCreate

    /* 单链表整表创建算法思路 1.声明一结点p和计数器变量i 2.初始化一空链表L 3.让L的头结点的指针指向NULL,即建立一个带头结点的单链表 4.循环: 生成一新结点赋值给p 随机生成一数字赋值 ...

  6. 计算机软件技术 上海电力学院,上海电力学院 计算机软件技术 实验三 用头插法和尾插法创建线性表...

    上海电力学院计算机软件技术实验三用头插法和尾插法创建线性表 #include #define MAXLEN 9 struct table {int key; int othererm; } ; typ ...

  7. 每日程序C语言42-带头结点的尾插法创建链表

    题目: 创建单链表(4) 程序分析 带头结点的尾插法创建链表 尾插法顾名思义就是从结点的尾部进行插入,头结点不动,后面的元素依次加入,因为头结点的data中没有存放任何元素,故打印出来是任意存放的值 ...

  8. 每日程序C语言41-带头结点的头插法创建链表

    题目: 创建单链表(3) 程序分析 带头结点的头插法创建链表 带有头结点的链表,头结点中的data中没有放置任何元素,头结点存储的地址就是链表首元素存储的地址.头插法顾名思义就是从链表的头部进行插入, ...

  9. 每日程序C语言40-不带头结点的尾插法创建链表

    题目: 创建一个链表(2) 程序分析 不带头结点的尾插法创建链表 这个是按照顺序插入的,尾插法,顾名思义就是从第一个节点的尾部插入,创建第一个节点之后,在循环中让前面的节点的next指针存储后面节点的 ...

最新文章

  1. 提高班第五周周记(国庆第二天)
  2. 中国小金属行业十四五供应需求及发展前景研究报告2021版
  3. PowerDesigner逆向工程从SqlServer数据库生成PDM(图文教程)
  4. nth-of-type
  5. Spring Boot 批量上传: The field files exceeds its maximum permitted size of 1048576 bytes.
  6. ceph常用命令-pool相关命令
  7. 序(不知道是什么时候的模拟题)
  8. sphinx java_把 sphinx 官方提供的 java api 添加到 maven 库
  9. spring boot 教程(五)使用JdbcTemplate访问数据库
  10. JavaSE基础知识点思维导图
  11. Detecting Deep-Fake Videos from Appearance and Behavior
  12. 车内静谧性超越埃尔法?走进腾势D9身价上亿的NVH实验室
  13. 90后,第一批接棒白酒的“年轻人”
  14. 论文Makeup Like a Superstar: Deep Localized Makeup Transfer Network(2016,妆容迁移,基于数据库匹配)
  15. 线性回归正则化 regularized linear regression
  16. html css设计网页初步
  17. ABAP--如何使用REUSE ALV GRID DISPLAY函数删除内表数据 样例代码,感谢依风提供
  18. idea插件开发-环境搭建
  19. LintCode 题解 |亚马逊、微软热门题:目的地的最短路径
  20. 终于有人把云计算与数据库的关系讲明白了

热门文章

  1. 菁英杯计算机能力大赛试题,“第四届全国大学生计算机系统能力培养大赛(龙芯杯)”决赛结果...
  2. 点云 3D 目标跟踪 - AB3DMOT(IROS 2020, ECCVW 2020)
  3. 怎么理解——用户不是人
  4. 【学习周报】深度学习笔记第二周
  5. 用Python去优惠券,看到结果我惊呆了!
  6. 8天掌握EF的Code First开发系列之动手写第一个Code First应用
  7. 「L2TP」- Layer 2 Tunneling Protocol @20210210
  8. 想去看演唱却总是抢不到票?教你用Python制作一个自动抢票脚本
  9. 机械振动信号15个时域统计指标
  10. macw资讯——妙控键盘与智能键盘:哪个适合您的 iPad?