[matplotlib 3D] 47.ボクセルサボテン(Voxel Cactus)

matplotlib 3D
スポンサーリンク
スポンサーリンク

3D形式のデータをもつstlファイルをボクセル形式に変換して、matplotlib のvoxelで表示する。

スポンサーリンク

コード

コードをダウンロード
スポンサーリンク

解説

stlファイルのダウンロード

Thingiverse - Digital Designs for Physical Objects
Thingiverse is a universe of things. Download our files and build them with your lasercutter, 3D printer, or CNC.

上記サイトからstlファイルをダウンロードして、下記サイトでボクセル形式に変換し、txtデータとして、ダウンロードした。

online html5 voxelizer
convert your 3D model into voxels

モジュールのインポート

データの読み込み

np.loadtxt(‘Cactus1.txt’,delimiter=’,’)と、ファイル名と区切りの形式を指定して読み込む。データの構造としては、(#,#,#)のデータが1列に連なったデータとなっている。

ボクセルデータの生成

dataの最大値を求めて、最大値+1のnp.indices()配列を生成する。ここでは、形状が(61,61,61)の、要素としてインデックスをもつ配列を作成し、それをそのまま、x,y,zとしている。

x[int(data[i,0]),int(data[i,1]),int(data[i,2])] = -1のfor文で、データと適合するx,y,zの位置を-1に変換する。適合する位置をすべて-1にしてから、voxels = x < 0 とすることで、voxelはdataの位置のみがTrueとなったbool型配列となる。

3Dグラフの表示

ax = fig.gca(projection=’3d’)で3Dグラフが表示できるようになる。
ax.set_aspect(‘equal’)でx,y,zの比率を揃えている。
ax.voxels(voxels, linewidth=0.3, facecolor=’lightgreen’,edgecolors=’k’)でボクセルを表示。
ax.view_init(elev=-160, azim=30)で視点の設定を行っている。
ax.set_axis_off()で軸を非表示にした。

その他の例

スポンサーリンク

参考

Thingiverse - Digital Designs for Physical Objects
Thingiverse is a universe of things. Download our files and build them with your lasercutter, 3D printer, or CNC.
online html5 voxelizer
convert your 3D model into voxels
スポンサーリンク
matplotlib 3Dpython
スポンサーリンク
この記事をシェアする
sabopy.comをフォローする
スポンサーリンク
サボテンパイソン

コメント