4

3D空間のボックスとポイントとして視覚化したいCコードの3Dデータ構造があります。そのため、ポイント用とボックス用の座標がたくさんあり、これらを3Dでプロットして、データ構造を視覚化したいと思います。誰かがこれに似た何かをした経験がありますか?私はparaviewを使おうとし始めました。私の計画は、paraviewステートファイル(xmlタイプのファイル)を生成してから、paraviewで開くことです。問題は、これらの状態ファイルが大規模で複雑なことです。xml構造を理解するために、私はパラビューでボックスとポイントソースを作成し、それが生成した状態ファイルを調べていました。ひどいですね。

これらの座標を持つボックスとこれらの座標を持つポイントを最小限の方法で表示できるようにしたいと思います。誰かアイデアはありますか?座標を出力し、最終製品を生成するために何でも入力できるので、必ずしもCまたはparaviewである必要はありません。Python + Matlabは、機能すれば同様に機能します。

4

3 に答える 3

3

だから私は素晴らしい妥協点を見つけました。私はここで説明されているようにgitコードから始めました:

http://www.shocksolution.com/microfluidics-and-biotechnology/visualization/python-vtk-paraview/

たった1つのPythonファイルです。要点は、ポイントのx、y、z位置と半径を指定し、VTK形式のXMLファイルを出力できるコードです。したがって、パーティクルを実行するには、x、y、zの位置を渡し、次にすべてのパーティクルの半径の定数を渡します。次に、データセットに球形のグリフを作成します。

ボックスには、まったく同じコードを使用します。各ボックスについて、x、y、z座標を出力します。ここで、x、y、z値はボックスの中心の座標です。次に、「半径」パラメータには、立方体のエッジの長さを使用します。これは、パラビューでボックスのデータポイントをグリフするだけなので機能します。ボックスグリフを使用し、スカラーでスケーリングします。ここで、スカラーは半径です。ボックスグリフの向きを変えず、スカラー係数を1に設定すると、目的の結果が得られます。これは、すべてが均一な簡単な例です。

シンプルなユニフォームツリー

したがって、Cデータ構造の座標をCSVファイルに出力し、Pythonでファイルをプルして、リンクのコードを使用し、結果をparaviewで開きます。リンクでコードを使用した方法は次のとおりです。

from vtktools import VTK_XML_Serial_Unstructured
import sys

if len(sys.argv) > 2:
    treeFile = sys.argv[1]
    bodyFile = sys.argv[2]
else:
    print 'No input files'
    exit(4)

x = []
y = []
z = []
r = []

f = open(treeFile, 'r')
for line in f:
    v = line.split(',')
    x.append(float(v[0].strip()))
    y.append(float(v[1].strip()))
    z.append(float(v[2].strip()))
    r.append(float(v[3].strip()))
f.close()

temp = treeFile.split('/')
if (len(temp) == 1):
    temp = temp[0]
else:
    temp = temp[-1]
tree_writer = VTK_XML_Serial_Unstructured()
tree_writer.snapshot(temp.split('.',1)[0] + '.vtu', x, y, z, [], [], [], [], [], [], r)
tree_writer.writePVD("octree.pvd")
x = []
y = []
z = []
r = []

f = open(bodyFile, 'r')
for line in f:
    v = line.split(',')
    x.append(float(v[0].strip()))
    y.append(float(v[1].strip()))
    z.append(float(v[2].strip()))
    r.append(float(v[3].strip()))
f.close()

temp = bodyFile.split('/')
if (len(temp) == 1):
    temp = temp[0]
else:
    temp = temp[-1]
body_writer = VTK_XML_Serial_Unstructured()
body_writer.snapshot(temp.split('.',1)[0] + '.vtu', x, y, z, [], [], [], [], [], [], r)
body_writer.writePVD("distribution.pvd")
于 2012-09-20T13:46:47.150 に答える
2

データは複雑ではないようですので...CSVファイルにエクスポートしてみませんか?

ParaViewMATLABなどから開くことができます...さらに、それは本当に簡単な実装です。

データがそれよりも複雑にならない場合は、これを選択します。

ハッピーコーディング!

于 2012-09-19T10:32:40.613 に答える
0

アルゴリズムが純粋なCであり、静的または固定のアニメーションデータを生成している場合は、多くのオプションを開くXML形式または独自の形式にエクスポートすることをお勧めします。

Colladaは、ソフトウェアにとらわれない方法で3Dオブジェクトを表現するために設計されたXML形式であり、一見の価値があります。その後、多数のアプリケーションで開いて表示できます。MaxやMayaでも、表示にコーディングは必要ありません。これらのエクスポートをネイティブに読み取るエンジンも利用できます。

それを視覚化する他の特定の方法に関しては、これは完全に自由な答えである可能性があるので、視覚化しようとしているアイテムの数とここで必要な相互作用の量に応じて、いくつかの提案がありますが、これは氷山の一角にすぎないことを私は知っています。

Matlabは数学グラフィックスのプロットに非常に優れているように見えますが、それについての私のかなり古い記憶は、操作が非常に遅くて面倒だったということでした。

シンプルなグーローシェーディングのテクスチャが必要で、完全な制御が必要な場合は、ネイティブのOpenGLプログラムを選択してください。最近では、それほど怖いものはありません。また、Cコードを保持できることも意味します。欠点は、特にカメラのコントロールや「ピクセル品質」の問題を処理する必要がある場合は、時間がかかることです。つまり、シャドウイング、アニメーション、シェーダーエフェクトなどを探している場合は、以下をお読みください...

ユーザーの操作、スタンドアロンアプリ、より洗練されたレンダリングが必要で、データセットが広大でない場合、またはC#としてコンパイルできる場合(つまり、ポインターを使用しない場合)、Unityを確認することをお勧めします。3Dレンダリングが桁違いに簡素化され、C#を記述して、レンダリングするメッシュ/パーティクルを生成し、いくつかの単純なカメラコントロールをチャックする(またはcolladaファイルをインポートする)必要があります。トリッキーな点は、初めての場合は、目的に合わせてメッシュを生成することに慣れるのに1、2日かかることです。

または、HTML5を介してWebGLでコーディングすることもできますが、他の誰かのWebGLシステムを使用してコーディングすることもできます。

このルートを選択した場合、一見の価値があるいくつかのアイテムがあります。私のお気に入りはPlayCanvasです。生成する必要がある場合は、colladaファイルも使用できると思います。

また、SceneJS.orgもあります。これは、より生々しく、まだ個人的には試していませんが、それについても言及する必要があります。

于 2012-09-18T21:32:07.710 に答える