如何用VTK和C++;? 我想用VTK来可视化C++中的流线。我已经写了一个代码,但它只是显示立方体的边缘,而流线是不可见的。这是我的密码: vtkPoints *p=vtkPoints::New(); vtkFloatArray *vectors=vtkFloatArray::New(); float vector[3]; vectors->SetNumberOfComponents(3); int sum=0; for(int i=0;i<4;i++) for(int j=0;j<4;j++) for(int k=0;k<4;k++) { p->InsertPoint(sum,k+5.0,j+5.0,i+5.0); vector[0]=0.5*k+0.1; vector[1]=0.2*j+0.2; vector[2]=0.3*+0.3; vectors->InsertNextTuple(vector); sum++; } vtkCellArray *line=vtkCellArray::New(); line->InsertNextCell(2); line->InsertCellPoint(63); line->InsertCellPoint(15); line->InsertNextCell(2); line->InsertCellPoint(0); line->InsertCellPoint(3); line->InsertNextCell(2); line->InsertCellPoint(0); line->InsertCellPoint(12); line->InsertNextCell(2); line->InsertCellPoint(12); line->InsertCellPoint(15); line->InsertNextCell(2); line->InsertCellPoint(3); line->InsertCellPoint(15); line->InsertNextCell(2); line->InsertCellPoint(0); line->InsertCellPoint(48); line->InsertNextCell(2); line->InsertCellPoint(48); line->InsertCellPoint(51); line->InsertNextCell(2); line->InsertCellPoint(48); line->InsertCellPoint(60); line->InsertNextCell(2); line->InsertCellPoint(63); line->InsertCellPoint(60); line->InsertNextCell(2); line->InsertCellPoint(12); line->InsertCellPoint(60); line->InsertNextCell(2); line->InsertCellPoint(63); line->InsertCellPoint(51); line->InsertNextCell(2); line->InsertCellPoint(51); line->InsertCellPoint(3); vtkPolyData *poly=vtkPolyData::New(); poly->SetPoints(p); poly->SetLines(line); vtkStructuredGrid *grid=vtkStructuredGrid::New(); grid->SetPoints(p); grid->GetPointData()->SetVectors(vectors); vtkRungeKutta4 *integ=vtkRungeKutta4::New(); vtkStreamLine *streamer=vtkStreamLine::New(); streamer->SetInput(grid); streamer->SetIntegrator(integ); streamer->SetIntegrationStepLength(0.15); streamer->SetMaximumPropagationTime(500); streamer->SetNumberOfThreads(2); streamer->SetStartPosition(5.0,0,0); streamer->SetStepLength(2.5); streamer->SetTerminalSpeed(0); streamer->SetSpeedScalars(0); streamer->SetVorticity(0); vtkTubeFilter *streamTube=vtkTubeFilter::New(); streamTube->SetInput((vtkPolyData *) streamer->GetOutput()); streamTube->SetNumberOfSides(12); streamTube->SetRadius(0.02); streamTube->SetUseDefaultNormal(0); vtkPolyDataMapper *pMap=vtkPolyDataMapper::New(); vtkPolyDataMapper *ppMap=vtkPolyDataMapper::New(); ppMap->SetInput(poly); pMap->SetInput((vtkPolyData *) streamTube->GetOutput()); vtkActor *pActor=vtkActor::New(); pActor->SetMapper(pMap); vtkActor *ppActor=vtkActor::New(); ppActor->SetMapper(ppMap); ppActor->GetProperty()->SetColor(0.3800,0.7000,0.1600); pActor->GetProperty()->SetColor(0.3800,0.7000,0.1600); vtkSmartPointer<vtkRenderer>pRen=vtkRenderer::New(); pRen->AddActor(pActor); pRen->AddActor(ppActor); //pRen->AddActor(ppA); vtkSmartPointer<vtkRenderWindow>pRenWin=vtkRenderWindow::New(); pRenWin->AddRenderer(pRen); vtkRenderWindowInteractor *pIren=vtkRenderWindowInteractor::New(); pIren->SetRenderWindow(pRenWin); pRen->SetBackground(1,1,1); pRenWin->SetSize(300,300); pRenWin->Render(); pRen->ResetCamera(); pIren->Initialize(); pIren->Start(); return 0; } vtkPoints*p=vtkPoints::New(); vtkFloatArray*vectors=vtkFloatArray::New(); 浮点向量[3]; 向量->SetNumberOfComponents(3); 整数和=0; 对于(inti=0;iInsertNextCell(2); 行->插入小区点(63); 行->插入小区点(15); 行->插入下一个单元格(2); 行->插入小区点(0); 行->插入小区点(3); 行->插入下一个单元格(2); 行->插入小区点(0); 行->插入小区点(12); 行->插入下一个单元格(2); 行->插入小区点(12); 行->插入小区点(15); 行->插入下一个单元格(2); 行->插入小区点(3); 行->插入小区点(15); 行->插入下一个单元格(2); 行->插入小区点(0); 行->插入小区点(48); 行->插入下一个单元格(2); 行->插入小区点(48); 行->插入小区点(51); 行->插入下一个单元格(2); 行->插入小区点(48); 行->插入小区点(60); 行->插入下一个单元格(2); 行->插入小区点(63); 行->插入小区点(60); 行->插入下一个单元格(2); 行->插入小区点(12); 行->插入小区点(60); 行->插入下一个单元格(2); 行->插入小区点(63); 行->插入小区点(51); 行->插入下一个单元格(2); 行->插入小区点(51); 行->插入小区点(3); vtkPolyData*poly=vtkPolyData::New(); 多边形->设定点(p); 多边形->设置线(线); vtkStructuredGrid*grid=vtkStructuredGrid::New(); 网格->设定点(p); 网格->GetPointData()->设置向量(向量); vtkRungeKutta4*integ=vtkRungeKutta4::New(); vtkStreamLine*拖缆=vtkStreamLine::New(); 拖缆->设置输入(网格); 拖缆->设置积分器(整数); 拖缆->设置集成步长(0.15); 拖缆->设置最大拖缆时间(500); 拖缆->设置线程数(2); 拖缆->设置起始位置(5.0,0,0); 拖缆->设置步长(2.5); 拖缆->设置终端速度(0); 拖缆->设置速度刻度(0); 拖缆->设置涡度(0); vtkTubeFilter*streamTube=vtkTubeFilter::New(); streamTube->SetInput((vtkPolyData*)拖缆->GetOutput(); 流管->设置面数(12); 流管->设定半径(0.02); streamTube->SetUseDefaultNormal(0); vtkPolyDataMapper*pMap=vtkPolyDataMapper::New(); vtkPolyDataMapper*ppMap=vtkPolyDataMapper::New(); ppMap->SetInput(多边形); pMap->SetInput((vtkPolyData*)streamTube->GetOutput(); vtkActor*pActor=vtkActor::New(); pActor->SetMapper(pMap); vtkActor*ppActor=vtkActor::New(); ppActor->SetMapper(ppMap); ppActor->GetProperty()->SetColor(0.3800,0.7000,0.1600); pActor->GetProperty()->SetColor(0.3800,0.7000,0.1600); vtkSmartPointerpRen=vtkrender::New(); pRen->AddActor(pActor); pRen->AddActor(ppActor); //pRen->AddActor(ppA); vtkSmartPointerpRenWin=vtkRenderWindow::New(); pRenWin->AddRenderer(pRen); vtkRenderWindowInteractor*pIren=vtkRenderWindowInteractor::New(); pIren->SetRenderWindow(pRenWin); pRen->backbackground(1,1,1); pRenWin->SetSize(300300); pRenWin->Render(); pRen->ResetCamera(); pIren->Initialize(); 旋转->开始(); 返回0; }

如何用VTK和C++;? 我想用VTK来可视化C++中的流线。我已经写了一个代码,但它只是显示立方体的边缘,而流线是不可见的。这是我的密码: vtkPoints *p=vtkPoints::New(); vtkFloatArray *vectors=vtkFloatArray::New(); float vector[3]; vectors->SetNumberOfComponents(3); int sum=0; for(int i=0;i<4;i++) for(int j=0;j<4;j++) for(int k=0;k<4;k++) { p->InsertPoint(sum,k+5.0,j+5.0,i+5.0); vector[0]=0.5*k+0.1; vector[1]=0.2*j+0.2; vector[2]=0.3*+0.3; vectors->InsertNextTuple(vector); sum++; } vtkCellArray *line=vtkCellArray::New(); line->InsertNextCell(2); line->InsertCellPoint(63); line->InsertCellPoint(15); line->InsertNextCell(2); line->InsertCellPoint(0); line->InsertCellPoint(3); line->InsertNextCell(2); line->InsertCellPoint(0); line->InsertCellPoint(12); line->InsertNextCell(2); line->InsertCellPoint(12); line->InsertCellPoint(15); line->InsertNextCell(2); line->InsertCellPoint(3); line->InsertCellPoint(15); line->InsertNextCell(2); line->InsertCellPoint(0); line->InsertCellPoint(48); line->InsertNextCell(2); line->InsertCellPoint(48); line->InsertCellPoint(51); line->InsertNextCell(2); line->InsertCellPoint(48); line->InsertCellPoint(60); line->InsertNextCell(2); line->InsertCellPoint(63); line->InsertCellPoint(60); line->InsertNextCell(2); line->InsertCellPoint(12); line->InsertCellPoint(60); line->InsertNextCell(2); line->InsertCellPoint(63); line->InsertCellPoint(51); line->InsertNextCell(2); line->InsertCellPoint(51); line->InsertCellPoint(3); vtkPolyData *poly=vtkPolyData::New(); poly->SetPoints(p); poly->SetLines(line); vtkStructuredGrid *grid=vtkStructuredGrid::New(); grid->SetPoints(p); grid->GetPointData()->SetVectors(vectors); vtkRungeKutta4 *integ=vtkRungeKutta4::New(); vtkStreamLine *streamer=vtkStreamLine::New(); streamer->SetInput(grid); streamer->SetIntegrator(integ); streamer->SetIntegrationStepLength(0.15); streamer->SetMaximumPropagationTime(500); streamer->SetNumberOfThreads(2); streamer->SetStartPosition(5.0,0,0); streamer->SetStepLength(2.5); streamer->SetTerminalSpeed(0); streamer->SetSpeedScalars(0); streamer->SetVorticity(0); vtkTubeFilter *streamTube=vtkTubeFilter::New(); streamTube->SetInput((vtkPolyData *) streamer->GetOutput()); streamTube->SetNumberOfSides(12); streamTube->SetRadius(0.02); streamTube->SetUseDefaultNormal(0); vtkPolyDataMapper *pMap=vtkPolyDataMapper::New(); vtkPolyDataMapper *ppMap=vtkPolyDataMapper::New(); ppMap->SetInput(poly); pMap->SetInput((vtkPolyData *) streamTube->GetOutput()); vtkActor *pActor=vtkActor::New(); pActor->SetMapper(pMap); vtkActor *ppActor=vtkActor::New(); ppActor->SetMapper(ppMap); ppActor->GetProperty()->SetColor(0.3800,0.7000,0.1600); pActor->GetProperty()->SetColor(0.3800,0.7000,0.1600); vtkSmartPointer<vtkRenderer>pRen=vtkRenderer::New(); pRen->AddActor(pActor); pRen->AddActor(ppActor); //pRen->AddActor(ppA); vtkSmartPointer<vtkRenderWindow>pRenWin=vtkRenderWindow::New(); pRenWin->AddRenderer(pRen); vtkRenderWindowInteractor *pIren=vtkRenderWindowInteractor::New(); pIren->SetRenderWindow(pRenWin); pRen->SetBackground(1,1,1); pRenWin->SetSize(300,300); pRenWin->Render(); pRen->ResetCamera(); pIren->Initialize(); pIren->Start(); return 0; } vtkPoints*p=vtkPoints::New(); vtkFloatArray*vectors=vtkFloatArray::New(); 浮点向量[3]; 向量->SetNumberOfComponents(3); 整数和=0; 对于(inti=0;iInsertNextCell(2); 行->插入小区点(63); 行->插入小区点(15); 行->插入下一个单元格(2); 行->插入小区点(0); 行->插入小区点(3); 行->插入下一个单元格(2); 行->插入小区点(0); 行->插入小区点(12); 行->插入下一个单元格(2); 行->插入小区点(12); 行->插入小区点(15); 行->插入下一个单元格(2); 行->插入小区点(3); 行->插入小区点(15); 行->插入下一个单元格(2); 行->插入小区点(0); 行->插入小区点(48); 行->插入下一个单元格(2); 行->插入小区点(48); 行->插入小区点(51); 行->插入下一个单元格(2); 行->插入小区点(48); 行->插入小区点(60); 行->插入下一个单元格(2); 行->插入小区点(63); 行->插入小区点(60); 行->插入下一个单元格(2); 行->插入小区点(12); 行->插入小区点(60); 行->插入下一个单元格(2); 行->插入小区点(63); 行->插入小区点(51); 行->插入下一个单元格(2); 行->插入小区点(51); 行->插入小区点(3); vtkPolyData*poly=vtkPolyData::New(); 多边形->设定点(p); 多边形->设置线(线); vtkStructuredGrid*grid=vtkStructuredGrid::New(); 网格->设定点(p); 网格->GetPointData()->设置向量(向量); vtkRungeKutta4*integ=vtkRungeKutta4::New(); vtkStreamLine*拖缆=vtkStreamLine::New(); 拖缆->设置输入(网格); 拖缆->设置积分器(整数); 拖缆->设置集成步长(0.15); 拖缆->设置最大拖缆时间(500); 拖缆->设置线程数(2); 拖缆->设置起始位置(5.0,0,0); 拖缆->设置步长(2.5); 拖缆->设置终端速度(0); 拖缆->设置速度刻度(0); 拖缆->设置涡度(0); vtkTubeFilter*streamTube=vtkTubeFilter::New(); streamTube->SetInput((vtkPolyData*)拖缆->GetOutput(); 流管->设置面数(12); 流管->设定半径(0.02); streamTube->SetUseDefaultNormal(0); vtkPolyDataMapper*pMap=vtkPolyDataMapper::New(); vtkPolyDataMapper*ppMap=vtkPolyDataMapper::New(); ppMap->SetInput(多边形); pMap->SetInput((vtkPolyData*)streamTube->GetOutput(); vtkActor*pActor=vtkActor::New(); pActor->SetMapper(pMap); vtkActor*ppActor=vtkActor::New(); ppActor->SetMapper(ppMap); ppActor->GetProperty()->SetColor(0.3800,0.7000,0.1600); pActor->GetProperty()->SetColor(0.3800,0.7000,0.1600); vtkSmartPointerpRen=vtkrender::New(); pRen->AddActor(pActor); pRen->AddActor(ppActor); //pRen->AddActor(ppA); vtkSmartPointerpRenWin=vtkRenderWindow::New(); pRenWin->AddRenderer(pRen); vtkRenderWindowInteractor*pIren=vtkRenderWindowInteractor::New(); pIren->SetRenderWindow(pRenWin); pRen->backbackground(1,1,1); pRenWin->SetSize(300300); pRenWin->Render(); pRen->ResetCamera(); pIren->Initialize(); 旋转->开始(); 返回0; },c++,vtk,C++,Vtk,我不明白哪里错了。如果有人能给我一些建议,我将不胜感激。以下是我发现的一些事情: 拖缆的起始位置在网格的域之外 你可能需要打电话 streamer->Update() 以前 streamTube->SetInput( streamer->GetOutput() ) pMap->SetInput( streamTube->GetOutput() ) 同样地 streamTube->Update() 以前 streamTube->SetInput(

我不明白哪里错了。如果有人能给我一些建议,我将不胜感激。

以下是我发现的一些事情:

  • 拖缆的起始位置在
    网格的域之外
  • 你可能需要打电话

    streamer->Update()
    
    以前

    streamTube->SetInput( streamer->GetOutput() )
    
    pMap->SetInput( streamTube->GetOutput() )
    
    同样地

    streamTube->Update()
    
    以前

    streamTube->SetInput( streamer->GetOutput() )
    
    pMap->SetInput( streamTube->GetOutput() )
    
    请注意(在VTK 6.3中,至少)
    streamer->GetOutput()
    streamTube->GetOutput()
    都返回vtkPolyData,因此不需要强制转换它

  • 您可能需要设置
    网格的尺寸,即

    grid->SetDimensions(4, 4, 4);
    
  • 考虑使用vtkOutlineFilter,而不是手动创建
    poly
    并将
    行添加到其中:

    vtkSmartPointer<vtkOutlineFilter> edges = vtkSmartPointer<vtkOutlineFilter>::New();
    edges->SetInputData(grid);
    ppMap->SetInputConnection(edges->GetOutputPort());
    
    vtkSmartPointer edges=vtkSmartPointer::New();
    边缘->设置输入数据(网格);
    ppMap->SetInputConnection(edges->GetOutputPort());
    
  • 如果以后不删除对象,您可能希望在任何地方都使用vtkSmartPointers,例如:

    vtkSmartPointer<vtkPoints> p = vtkSmartPointer<vtkPoints>::New();
    vtkSmartPointer<vtkFloatArray> vectors = vtkSmartPointer<vtkFloatArray>::New();
    vtkSmartPointer<vtkRungeKutta4> integ = vtkSmartPointer<vtkRungeKutta4>::New();
    vtkSmartPointer<vtkStreamLine> streamer = vtkSmartPointer<vtkStreamLine>::New();
    
    vtkSmartPointer p=vtkSmartPointer::New();
    vtkSmartPointer vectors=vtkSmartPointer::New();
    vtkSmartPointer integ=vtkSmartPointer::New();
    vtkSmartPointer拖缆=vtkSmartPointer::New();
    
    更多信息,请参阅


  • 根据您的建议,通过设置尺寸可以看到流线。非常感谢!但是对于第四个问题,我使用vtkOutlineFilter取消多边形和线条。vtkOutlineFilter没有SetInputData,只有SetInput和SetInputConnection。我尝试了edges->SetInput(网格),但它不起作用,多维数据集的边缘也没有显示。我想知道您是否有其他解决方案。顺便说一句,我使用的是VTK5.10.1。啊,对不起,我对VTK 5.10不太熟悉。或许可以尝试vtkStructuredGridOutlineFilter?此wiki示例可能会有所帮助: