2017-04-19 18 views
0

私はの3Dボックスを特定の三角形の隣にある特定のサイズと場所のジオメトリと定義します。ParaViewクリップ/スライス、ボックスパラメータ:位置、回転、スケールの意味。 Matlabの再構築ボックス

したがって、ParaViewでジオメトリメッシュを開きます。次に、タイプ「ボックス」のクリップ(またはスライス)を使用します。このようにして、ParaView の3Dウィジェットをマウスですばやくインタラクティブに移動、回転、サイズ変更することができます。

プロパティパネルはいつも私に示してボックスパラメータ

  • ポジション
  • 回転
  • スケール

これまでのところは良いが、私はどのように使用することができ、これらをMATLABのようなParaViewの外にあるこのボックスで動作する値は?箱の実際の座標は?

Ventricle Placement Below Atria

答えて

0

は、私たちはあるParaViewのうち、ボックスのプロパティをコピーします。

box = struct(); 
box.translate = [-274.8975, -114.0316, -333.6671]; 
box.rotate = [27.066, 119.62, -175.472]; 
box.scale  = [1.031, 0.663, 1.2233]; 

ボックスサイズは、クリップフィルターは、上に定義されたジオメトリのサイズを基準にしています。だから、まず頂点をsurfptsに保存して、ジオメトリの範囲を取得します。

surfpts = ...; % [nPoints x 3] 
mn = min(surfpts,[],1); 
mx = max(surfpts,[],1); 

この例では、点のグリッドをボックスに入力します。

box.xyz = arrayfun(@(a,b) linspace(a,b,n)', mn, mx, 'UniformOutput',false); 
box.xyz = cell2mat(box.xyz); 
[X,Y,Z] = ndgrid(box.xyz(:,1), box.xyz(:,2), box.xyz(:,3)); 
box.XYZ = [X(:), Y(:), Z(:)]; 

は今、我々はのParaviewボックス3Dウィジェットにしたアクションに応じて、拡大縮小回転して(この順番で!)私たちのグリッドを翻訳する必要があります。

% Scaling 
box.XYZ = bsxfun(@times, box.XYZ, box.scale); 
% Rotation 
box.XYZ = (rotz(box.rotate(3)) * rotx(box.rotate(1)) * roty(box.rotate(2)) * box.XYZ')'; 
% Translation 
box.XYZ = bsxfun(@plus, box.XYZ, box.translate); 

最後に、ParaViewで作成したボックスを再度開いて確認します。これはボックスと正確に一致します。

TR = delaunayTriangulation(box.XYZ); 
[box_tri, box_pts] = TR.freeBoundary(); 
vtkwrite('tmp_box.vtk','polydata','triangle',box_pts(:,1),box_pts(:,2),box_pts(:,3),box_tri) 
関連する問題