月曜日, 7月 23, 2012

網模様 : mesh textile


----------------------------
個人的な趣味でアレコレ,アミアミ模様をつくる作業を.
以下,自分向けメモ.

1・enGrid .... ×(インストールうまくいかず)
2・netgen .... x (インストールうまくいかず..そもそも linux 版あるのか?)
3・gmsh .... インストールできたけど,GUI の数値入力がうまくいかないときがある
                  インターフェース,思想が,ややこしい.

4・自作のアレコレプログラム .... 時間がかかる,でも,勉強になる.
5・自作+既存のライブラリとかをミックス.


----------------------------

で,いろいろ考えた末に 5 の パータンを考える.

そんなときに,triangle コマンドに出会う.
知ってる人は知ってるとおもうけど,GMT にも,使われてたりする.

この人のページをみて,少し勉強してみた.

なるへそ.ちゃんと動いた動いた.

でも, showme というコマンドでエラーがでる.
 せっかく点列が出てるのに,確認表示できないなぁ.

ということで,出力された点列,三角形リストから
STL ファイルを作るプログラムを Fortran で取り急ぎ作成.
(所要時間 40 分くらいか?)


ちゃんと パラビューで読めた.

----------------------------

いつもお世話になってる,この人のプログラムと,admesh をインスコしておく.

適当なディレクトリにおいて,パスとおして,どこからでもコマンドライン利用できるようにしておく.


なぜ,このへんのプログラムを入れるか?

上記の triangle ツールが 2 次元にしか対応してないため.

----------------------------

作業時に,バイナリデータとかも,見なアカンから

yum -y install bvi

としておく.

----------------------------

admesh のコマンド指定の仕方を忘れてしまったが,
むかしのこのブログページを便りに,作業ノートに付記している時期を特定して
なんとか,昔のメモを見つける.

結論からいうと,

 admesh --y-rotate=45 ./input.stl -a ./output.stl

と言う具合にやる.
入力ファイルと出力ファイルの間の "-a" は"アスキー やでぇ" の意味.
* ご想像どおり, -b で "バイナリやでぇ" の指定.

ちなみに,solid 名は書き換わってしまう.


回転したものの,おかしな線が入る.
回転軸を形状のエッジにずらせば,治るか?


もともとのLの字形状(X-Y 平面)を,
Y=+1 として,さっきの 90 度回転をやってみようかなぁ...

《平行移動》

 admesh --translate=0,1,0 ./data/output.stl -a ./data/01.stl


平行移動だけでも,変な線を勝手に入れてる....!

しかたないから,昔作った座標変換 Fortran プログラムを使うか...



まともに動いてる.

さらに赤い領域を X 軸まわりで,90度回転すると,


他人の作ったプログラムはブラックボックス的でアテにならんが
(もちろん,多くは優秀なプログラム),自分で作ると安心感が.

----------------------------
以下のような,矩形の領域指定パラメータと三角形の微小要素辺長 (dL) を指定して,
矩形 STL ファイルを作成するシェルスクリプトをつくる.

x0=0.0
y0=0.0
z0=0.0
Lx=100.0
Ly=120.0
Lz=140.0
dL=5.0





結果的には,

こんな感じ.

----------------------------

上記ができれば,なかの領域に四面体セルを敷き詰めたくなるもの.
残念ながら, パラビュウでその処理を行うには STL 側が1ファイル?である必要が...

ということで,上記の 6 面 STL をマージしてみる.


みると,全然ダメ.

メニュー上,3D Delauney というのがあるが,所詮 Post ツールであって, Pre じゃないので.

----------------------------3D Delauney の対処は後回しにして,
孔つきの,二次元 Delauney を triangle コマンドで考える.

見様見真似で,以下のようなデータファイルを用意 (withHole.poly と命名).


# withHole.poly
# triangle -pqa6.5 ./withHole.poly
8  2  0  0
# outer
1  0.0 0.0
2  100.0 0.0
3  100.0 70.0
4  0.0 70.0
# inner
5  40.0 20.0
6  60.0 20.0
7  60.0 40.0
8  40.0 40.0
#
8  0
1   1  2
2   2  3
3   3  4
4   4  1
#
5   5  6
6   6  7
7   7  8
8   8  5
#
1
1   45.0  25.0


で,コマンドラインで,

triangle -pqa6.5 ./data/withHole.poly


と打ち込む.6.5 は三角形の最小面積,最後のカラムは入力ファイル.入力ファイルの最終行で,どの閉領域が孔かを判別させるための座標値入力かと思われる.



なかなか,やりおるなぁ.. triangle .

----------------------------

いろいろ頑張ったけど,
こーいう手もあるようだ.



----------------------------
ある程度,2次元については,疑問が片付いたから,
3 次元の閉領域にセルを敷き詰める方法を考えたい.

----------------------------
上の,直方体 STL を gmsh で読ませると,こんな感じ.


操作,表示法を理解してないからわからないが,
素の状態の STL のアミアミとは違う.

敵か味方かわからない gmsh .....

----------------------------

引き続いて,アレコレ調べてると,
こーいうツールに行き当たった.

入出力のファイルフォーマットからみて,上記の triangle を意識してるのか?

インストールも triangle のようにサックリ.

ちゃんと変換できてるかどうか,パラビュウでみるためにも,
VTK に変換することを考える.

とは言っても,VTK フォーマットは詳しくないので,
いつもお世話になってる,このページを見る.

四面体について参考にしておく.ただ,1セル分のサンプルしか載ってないので,
複数セルをどうやって書くか調べておく.


以下のようなファイルを用意

# vtk DataFile Version 2.0
sample data de arinsu   .... 何書いてもいい
ASCII                            
.... アスキー
DATASET UNSTRUCTURED_GRID
POINTS 5 float  
.... 以降に節点が5行記述される(浮動小数点表記)
0.0  0.0  0.0
1.0  0.0  0.0
0.0  1.0  0.0
0.0  0.0  1.0
0.0  0.0  -1.0
CELLS 2 10
   .... 2セル分,データの個数は合計 10 個(10カラム)
4 0 1 2 3    
.... 4 点で, 四面体記述(0 1 2 3)
4 0 1 2 4
CELL_TYPES 2 
    .... セルの個数 2 個
10  
    .... 四面体用の予約番号

10



多分,OK牧場.

----------------------------

tetgen が吐き出す出力ファイルをみて vtk ファイルへの変換プログラムを考える.

ゴリゴリ,コーディング....

四面体のフェイス番号リストを,四面体の節点番号リストに変換するアルゴリズム,どうしようか...

あたまが こんがらがり そうだったので,ちゃんと初心にもどって
フローチャートを描く.


プログラム作り終わったあとに,
データが読み込みエラー(エラーはでないけど,表示がおかしい).

よくよく,フォーマット説明を読んだら,
上記のような,ことをせずとも,テトラ要素の節点リストだったことが判明.


できあがってプログラムつかって,,サンプルデータで,vtk を出力処理すると


合っているのか,間違っているのか...
----------------------------

こんなサンプル載っけてくれるんだったら,サンプルデータも置いてほしいなぁ.

----------------------------

明日,もっとプログラム,チェック&改良しよっと.

----------------------------




0 件のコメント: