如何用vtk同时画多条线
how to draw multiple lines simultaneously with vtk?
目标是从多个点划线我有两个向量tab_recupere_P1和tab_recubere_P2,每个向量的大小是14。我浏览了两个向量,每次迭代都会得到PP1和PP2点来构建一条线。
我使用了几种方法,但都给出了相同的结果
这是我的代码:方法1:
for ( std::vector<Coord_point*>::iterator i = tab_recupere_P1.begin();
i != tab_recupere_P1.end();
++i)
{
new_p = *i;
pp1[0] = new_p->p0[0];
pp1[1] = new_p->p0[1];
pp1[2] = new_p->p0[2];
std::cout << " x : "<< pp1[0] << " y : " << pp1[1] << " z : " << pp1[2] <<std::endl;
for ( std::vector<Coord_point*>::iterator j = tab_recupere_P2.begin();
j != tab_recupere_P2.end();
j++)
{
new_p2 = *j;
pp2[0] = new_p2->p0[0];
pp2[1] = new_p2->p0[1];
pp2[2] = new_p2->p0[2];
std::cout << " x2 : "<< pp2[0] << " y2 : " << pp2[1] << " z2 : " << pp2[2] <<std::endl;
// Add the two poitns to a vtkPoints object
vtkSmartPointer<vtkPoints> pts = vtkSmartPointer<vtkPoints>::New();
pts->InsertNextPoint(pp1);
pts->InsertNextPoint(pp2);
// Create a line between the two points
vtkSmartPointer<vtkLine> line =
vtkSmartPointer<vtkLine>::New();
for(unsigned int h = 0; h < 2; h++)
{
line->GetPointIds()->SetId(h,h);
}
// Create a cell array to store the line in
vtkSmartPointer<vtkCellArray> lines =
vtkSmartPointer<vtkCellArray>::New();
lines->InsertNextCell(line);
// Create a polydata to store everything in
vtkSmartPointer<vtkPolyData> pdata =
vtkSmartPointer<vtkPolyData>::New();
// Add the points to the dataset
pdata->SetPoints(pts);
// Add the lines to the dataset
pdata->SetLines(lines);
#if VTK_MAJOR_VERSION <= 5
mapper->SetInput(pdata);
#else
mapper->SetInputData(pdata);
#endif
actor->SetMapper(mapper);
vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
renderWindowInteractorLine->SetRenderWindow(renderWindow);
renderer->AddActor(actor);
ui.qvtkWidget_Visualisation->SetRenderWindow(renderWindow);
ui.qvtkWidget_Visualisation->update();
renderWindowInteractorLine->Initialize();
renderWindowInteractorLine->Start();
break;
}
}
方法编号2:我把线存储在一个向量中,然后我可以画出每条线的
for ( std::vector<Coord_point*>::iterator i = tab_recupere_P1.begin();
i != tab_recupere_P1.end();
++i)
{
new_p = *i;
pp1[0] = new_p->p0[0];
pp1[1] = new_p->p0[1];
pp1[2] = new_p->p0[2];
std::cout << " x : "<< pp1[0] << " y : " << pp1[1] << " z : " << pp1[2] <<std::endl;
for ( std::vector<Coord_point*>::iterator j = tab_recupere_P2.begin();
j != tab_recupere_P2.end();
j++)
{
new_p2 = *j;
pp2[0] = new_p2->p0[0];
pp2[1] = new_p2->p0[1];
pp2[2] = new_p2->p0[2];
std::cout << " x2 : "<< pp2[0] << " y2 : " << pp2[1] << " z2 : " << pp2[2] <<std::endl;
vtkSmartPointer<vtkLineSource> lineSource =
vtkSmartPointer<vtkLineSource>::New();
lineSource->SetPoint1(pp1);
lineSource->SetPoint2(pp2);
lineSource->Update();
tab_lineSource.push_back(lineSource);
break;
}
}
vtkSmartPointer<vtkLineSource> new_lineSource =
vtkSmartPointer<vtkLineSource>::New();
for ( std::vector<vtkLineSource*>::iterator l = tab_lineSource.begin();
l != tab_lineSource.end();
l++)
{
new_lineSource = *l;
mapper->SetInputConnection(new_lineSource->GetOutputPort());
actor->SetMapper(mapper);
actor->GetProperty()->SetLineWidth(1);
actor->GetProperty()->SetColor(1,0,0);
vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
vtkSmartPointer<vtkRenderWindow> renderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
renderWindowInteractorLine->SetRenderWindow(renderWindow);
renderer->AddActor(actor);
ui.qvtkWidget_Visualisation->SetRenderWindow(renderWindow);
ui.qvtkWidget_Visualisation->updateGeometry();
renderWindowInteractorLine->Initialize();
renderWindowInteractorLine->Start();
}
问题是,无论采用何种方法,都会绘制出第一次迭代的线条,并且没有错误消息。但是所需要的是从存储在矢量中的点绘制所有的线。
你能帮帮我吗!!请
这两个例子都有很多错误。
示例1:
- 你在内环的末端有一个缺口。这将在第一次执行内部循环后终止该循环
- 您可以为每个循环创建新行、多数据和新的渲染器
示例2:
- 您在内部循环中再次有一个中断,它将在第一次执行后终止它
- 同样,在每次循环迭代期间,您都会创建一大堆VTK类(包括一个渲染器和一个渲染窗口),同时您应该在两个循环之前和外部创建它们一次
这个代码还有很多错误。你应该从一个简单得多的例子开始。也可以尝试缩进代码,这样读(对你来说)真的很难。
相关文章:
- Qt VTK交互风格的信号到小部件
- 如何用数字处理log(0)
- 如何用转义符替换字符串中的所有特殊字符
- 如何用参数值调用函数(仅在运行时已知)
- 如何用RISC-V GD32VF103CBT6开发板卸载精确的ADC过采样
- 如何用for循环在c++中生成单词三角形
- 如何用C++编写BFS函数
- 当对话框被接受时,如何用参数调用槽
- 我不明白这段代码是如何对这个pythonlist()进行排序的,也不明白如何用C++中的向量来重现它
- 如何禁用VTK的热键
- 如何用前导零填充数组?
- 如何用 2 个对象过度引导运算符
- 如何用C / C++编写钢琴程序
- C++:如何用单个命令替换复杂的迭代?
- QVTKWidget在VTK 8.1中已弃用,并将在未来的版本中删除
- 如何在 vtk Poly 数据上进行布尔运算?
- VTK 图像数据,访问数组中的 1 个图像
- 如何用文本填充 std::vector<int64_t>
- 如何用c++在vtk中设置三维地图的边界
- 如何用vtk同时画多条线