我想自己讀取txt檔案,存盤到vtkStructuredPoints資料中,然后利用vtkStreamTracer繪制流線
int main()
{
vtkSmartPointer<vtkStructuredPoints> Points1 = vtkSmartPointer<vtkStructuredPoints>::New();
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
vtkCellArray *cells = vtkCellArray::New();
vtkSmartPointer<vtkFloatArray> scalars = vtkSmartPointer<vtkFloatArray>::New();
scalars->SetNumberOfTuples(3 * 3 * 3);
vtkSmartPointer<vtkFloatArray> vectors = vtkSmartPointer<vtkFloatArray>::New();
vectors->SetNumberOfTuples(3 * 3 * 3);
vectors->SetNumberOfComponents(3);
vtkIndent indent;
auto integ = vtkSmartPointer<vtkRungeKutta4>::New();
ifstream readFile1("C:\\Users\\Administrator\\Desktop\\vector.txt");
ifstream readFile2("C:\\Users\\Administrator\\Desktop\\scalar.txt");
double temp[27] = { 0.0 };
double vector[27][3] = { 0.0 };
vtkIdType idtype;
int t = 0, id = 0;
for (int i = 0; i < 27; i++)
{
readFile2 >> temp[i];
for (int j = 0; j < 3; j++)
{
readFile1 >> vector[i][j];
}
}
for (int i = 0; i < 27; i++)
{
scalars->InsertTuple1(i, temp[i]);
vectors->InsertTuple3(i, vector[i][0], vector[i][1], vector[i][2]);
}
readFile1.close();
readFile2.close();
Points1->SetDimensions(3, 3, 3);
Points1->SetOrigin(0, 0, 0);
Points1->SetSpacing(1.0, 1.0, 1.0);
Points1->GetPointData()->SetScalars(scalars);
Points1->GetPointData()->SetVectors(vectors);
vtkSmartPointer<vtkImageDataGeometryFilter> geometryFilter =
vtkSmartPointer<vtkImageDataGeometryFilter>::New();
geometryFilter->SetInputData(Points1);
geometryFilter->Update();
scalars->Delete();
vectors->Delete();
auto colors =
vtkSmartPointer<vtkNamedColors>::New();
// Source of the streamlines---------------------------------------------------------------------------------------------------------------------------------------
vtkSmartPointer<vtkPlaneSource> seeds =
vtkSmartPointer<vtkPlaneSource>::New();
seeds->SetXResolution(10);
seeds->SetYResolution(10);
seeds->SetOrigin(0, 0, 0);
seeds->SetPoint1(3, 0, 0);
seeds->SetPoint2(0, 0, 3);
auto streamer =
vtkSmartPointer<vtkStreamTracer>::New();
streamer->SetInputConnection(geometryFilter->GetOutputPort());
streamer->SetSourceConnection(seeds->GetOutputPort());
streamer->SetMaximumPropagation(100);//步數
streamer->SetInitialIntegrationStep(0.05);//步長
streamer->SetIntegrationDirectionToBoth();//積分方向
//streamer->SetIntegrationDirectionToForward();
//streamer->SetIntegrator(integ);////四階Runge-Kutta法用于求常微分方程的較高精度的數值解。
//定義顏色映射表
vtkSmartPointer<vtkLookupTable> pColorTable = vtkSmartPointer<vtkLookupTable>::New();
//設定顏色表中的顏色
pColorTable->SetNumberOfColors(256);
pColorTable->SetHueRange(0.7, 0); //色調范圍從紅色到藍色
pColorTable->Build();
vtkSmartPointer<vtkPolyDataMapper> streamLineMapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
streamLineMapper->SetInputConnection(streamer->GetOutputPort());
streamLineMapper->SetScalarRange(0, 10);
streamLineMapper->SetLookupTable(pColorTable);
//Actor
vtkSmartPointer<vtkActor> streamLineActor = vtkSmartPointer<vtkActor>::New();
streamLineActor->SetMapper(streamLineMapper);
streamLineActor->GetProperty()->SetPointSize(5);
//streamLineActor->GetProperty()->SetLineWidth(2);
//*/
// Now create the usual graphics stuff.
auto renderer =
vtkSmartPointer<vtkRenderer>::New();
auto renderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
auto interactor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
interactor->SetRenderWindow(renderWindow);
vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
interactor->SetInteractorStyle(style);
renderer->AddActor(streamLineActor);
renderer->SetBackground(colors->GetColor3d("SlateGray").GetData());
renderWindow->SetSize(640, 480);
renderWindow->Render();
interactor->Start();
return 1;
}
報錯
uj5u.com熱心網友回復:
看呼叫堆疊。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/269503.html
標籤:C++ 語言
上一篇:stm32 兩個串口在某個時間點需要同時處理任務,請問怎么處理?等三個問題
下一篇:為什么出不來結果
