0

Paraview に vtkUNiformGrid を表示しています。これには、各ポイントに 3 成分フロー ベクトルが含まれています。ボリューム レンダリングを使用してデータセットを表示すると、罰金のみが表示されます。ただし、まったく同じデータに矢印グリフを追加すると、同じデータが表示されますが、他の場所では小さく、複数のコピー (9 個) で表示されます。おそらく、画像は私が意味することをよりよく示しています: スクリーンショット

どこを見たらいいのか、ちょっと迷います。私は何かを台無しにしましたか?他のアイデア?

4

2 に答える 2

0

デバッグを容易にするために、2 つ目のレイアウト ウィンドウを開いて [スプレッドシート ビュー] を選択し、グリフ フィルタを適用しているソースを確認します。PointData の下にプロットしようとしているベクター データはありますか? 次に、プロットしようとしている配列が [ベクトル] ドロップダウン ボックスに示されていることをグリフ フィルター プロパティで確認します。

于 2014-03-12T00:22:35.090 に答える
0

念のために言っておきますが、原因は実際にvtkDoubleArrayは間違った方法でデータを に書き込んでいたことです。配列には 3 つのコンポーネントがあり、インデックスは本来あるべきものの 1/3 であり、x/y/z 値が点在していました (つまり、私が気付いたように、下3分の3の3x3パターン); コンポーネントが連続して格納されていると想定していましたが、明らかにそうではありません。

古いコードは次のようなものでした。

auto flow=vtkSmartPointer<vtkDoubleArray>::New();
flow->SetNumberOfComponents(3);

auto grid=vtkSmartPointer<vtkUniformGrid>::New();
grid->SetDimensions(...);
grid->GetPointData()->AddArray(flow);

for(int i:{0,1,2}) flow->FillComponent(i,0);

for(ijk: ... /* traverses the grid, each point potentially more than once */ ){
   vtkIdType dataId=grid->ComputePointId(ijk);
   // XXX: this is what caused troubles:
   double* f0=flow->GetPointer(dataId);
   f[0]+=dx;
   f[1]+=dy;
   f[2]+=dz;
}

ループ本体の正しいバージョンは次のとおりです。

double f[3];
flow->GetTupleValue(dataId,f); // copy the data
f[0]+=dx;
f[1]+=dy;
f[2]+=dz;
flow->SetTupleValue(dataId,f);

スカラー データセットとベクトル データセットの両方が一致するようになりました。 スクリーンショットの改善

于 2014-03-12T09:05:15.583 に答える