vtk基本数据结构
2020-06-10
數據對象被組織成一種結構并且被賦予相應的屬性值時就形成數據集(Dataset)。VTK里數據集對應的類是vtkDataSet,該類從vtkDataObject直接派生。vtkDataSet由兩個部分組成,即組織結構(Organizing Structure)以及與組織結構相關聯的屬性數據(Attribute Data)。
vtkDataSet的組織結構由拓撲結構(Topology)和幾何結構(Geometry)兩部分組成。拓撲結構描述了物體的構成形式,幾何結構描述了物體的空間位置關系。換言之,點數據(Point Data)所定義的一系列坐標點構成了vtkDataSet(數據集)的幾何結構;點數據的連接(點的連接先形成單元數據(Cell Data),由單元數據再形成拓撲)就形成了數據集的拓撲結構。比如,我們想要在屏幕上顯示一個三角形,首先我們必須定義三角形三個點的坐標(即Point Data,記三個點為P1, P2和P3),然后將這三個點按照一定的順序連接起來(P1-P2-P3,或者是P3-P2-P1的順序),這三個點定義了數據集的幾何結構,它們的連接就構成了數據集的拓撲結構。亦即,點數據(Point Data)定義數據集的幾何結構,單元數據(Cell Data)定義數據集的拓撲結構,要形成完整的數據集,必須有幾何和拓撲兩種結構。屬性數據是對拓撲結構和幾何結構信息的補充,屬性數據可以是某個空間點的溫度值,也可以是某個單元的質量之類的。屬性數據包括點屬性和單元屬性。可以為vtkPolyData的點數據和單元數據分別指定屬性數據。
1.
結果
2
點數據(Point Data)定義數據集的幾何結構,單元數據(Cell Data)定義數據集的拓撲結構 vtkCellArray類型的對象vertices就是用來指定數據集polydata的拓撲結構, 而polydata的幾何結構則是由points來定義的。 #include <vtkSmartPointer.h> #include <vtkPoints.h> #include <vtkPolyData.h> #include <vtkPolyDataMapper.h> #include <vtkActor.h> #include <vtkProperty.h> #include <vtkRenderer.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h>int main(){vtkSmartPointer<vtkPoints> pts =vtkSmartPointer<vtkPoints>::New();pts->InsertNextPoint(0.0, 0.0, 0.0);pts->InsertNextPoint(1.0, 0.0, 0.0);pts->InsertNextPoint(1.0, 1.0, 0.0);pts->InsertNextPoint(0.0, 1.0, 0.0);pts->InsertNextPoint(2.0, 0.0, 0.0);vtkSmartPointer<vtkCellArray> vertices = vtkSmartPointer<vtkCellArray>::New();for (int i = 0; i < 5; i++) {vtkIdType pt[1] = { i };vertices->InsertNextCell(1, pt);}vtkSmartPointer<vtkPolyData> polyData=vtkSmartPointer<vtkPolyData>::New();polyData->SetPoints(pts);polyData->SetVerts(vertices);vtkSmartPointer<vtkPolyDataMapper> mapper =vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputData(polyData);vtkSmartPointer<vtkActor> actor =vtkSmartPointer<vtkActor>::New();actor->SetMapper(mapper);actor->GetProperty()->SetPointSize(5);vtkSmartPointer<vtkRenderer> render =vtkSmartPointer<vtkRenderer>::New();render->AddActor(actor);render->SetBackground(0.0, 0.0, 0.0);vtkSmartPointer<vtkRenderWindow> rw =vtkSmartPointer<vtkRenderWindow>::New();rw->AddRenderer(render);rw->SetSize(320, 240);vtkSmartPointer<vtkRenderWindowInteractor> rwi =vtkSmartPointer<vtkRenderWindowInteractor>::New();rwi->SetRenderWindow(rw);rwi->Render();rwi->Start();return 0;}結果
3
將零維的點拓撲結構改成一維的線拓撲結構 #include <vtkSmartPointer.h> #include <vtkPoints.h> #include <vtkLine.h> #include <vtkPolyData.h> #include <vtkPolyDataMapper.h> #include <vtkActor.h> #include <vtkProperty.h> #include <vtkRenderer.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h>int main(){vtkSmartPointer<vtkPoints> pts =vtkSmartPointer<vtkPoints>::New();pts->InsertNextPoint(1.0, 0.0, 0.0);pts->InsertNextPoint(0.0, 0.0, 1.0);pts->InsertNextPoint(0.0, 0.0, 0.0);vtkSmartPointer<vtkLine> line0 = vtkSmartPointer<vtkLine>::New();line0->GetPointIds()->SetId(0, 0);line0->GetPointIds()->SetId(1, 1);vtkSmartPointer<vtkLine> line1 = vtkSmartPointer<vtkLine>::New();line1->GetPointIds()->SetId(0, 0);line1->GetPointIds()->SetId(1, 2);vtkSmartPointer<vtkLine> line2 = vtkSmartPointer<vtkLine>::New();line2->GetPointIds()->SetId(0, 1);line2->GetPointIds()->SetId(1, 2);vtkSmartPointer<vtkCellArray> lines = vtkSmartPointer<vtkCellArray>::New();lines->InsertNextCell(line0);lines->InsertNextCell(line1);lines->InsertNextCell(line2);vtkSmartPointer<vtkPolyData> polyData=vtkSmartPointer<vtkPolyData>::New();polyData->SetPoints(pts);polyData->SetLines(lines);vtkSmartPointer<vtkPolyDataMapper> mapper =vtkSmartPointer<vtkPolyDataMapper>::New();mapper->SetInputData(polyData);vtkSmartPointer<vtkActor> actor =vtkSmartPointer<vtkActor>::New();actor->SetMapper(mapper);vtkSmartPointer<vtkRenderer> render =vtkSmartPointer<vtkRenderer>::New();render->AddActor(actor);render->SetBackground(0.0, 0.0, 0.0);vtkSmartPointer<vtkRenderWindow> rw =vtkSmartPointer<vtkRenderWindow>::New();rw->AddRenderer(render);rw->SetSize(320, 240);vtkSmartPointer<vtkRenderWindowInteractor> rwi =vtkSmartPointer<vtkRenderWindowInteractor>::New();rwi->SetRenderWindow(rw);rwi->Render();rwi->Start();return 0;}結果
總結
- 上一篇: 《转》Python学习(16)-pyth
- 下一篇: 关于VS AddIn的注册