OpenModelicaには3D CADデータ(.dxf)を表示する機能があります。
(読み込み方法などの詳細はこちらを参照)
私はファイル形式やグラフィックスに詳しくありませんが、OpenModelicaでdfxファイルを読み込むときの注意点が経験的に分かってきたのでメモ代わりに記載致します。
補足として、dxfファイルはテキストエディタで開けるため、内部構造を確認することが出来ます。
dxfファイルの構造次第では読み込めない
詳しくは分かりませんがdxfには様々な構造があるようです。
FreeCAD0.14で出力した球体のdxfファイルは読み込めませんでした。
本記事の一番下にそのファイルのテキストデータを貼っておきます。
3DFACEというエンティティを使用していた場合、読み込めるようです。
詳しいフォーマットの解説は以下のサイト様が参考になりました。
https://www.hiramine.com/programming/3dmodelfileformat/dxffileformat.html
読み込んだdxfファイルが真っ黒で表示される
上記のサイト様の一番下にサンプルとして立方体形状のdxfファイル(cube.dxf)があります。
これを読み込むと形状は定義されていますがすべての面が真っ黒となってしまいます。
(OpenModelica1.17で表示)
これは面の色情報が定義されていないためで、色情報を定義することで任意の色にすることが出来ます。
- 色情報付与前のdxfファイルの3DFACEエンティティの記述
3DFACE
8
0
10
0
20
0
30
・
・
・
- 色情報付与後のdxfファイルの3DFACEエンティティの記述
3DFACE
8
default ←追加
62 ←追加
3 ←追加
0
10
0
20
0
30
・
・
・
「62」は色番号のグループコードで、この下に色番号を記載します。
dxfファイルの色情報はRGBに応じて番号が割り振られています。
詳細は以下のサイト様をご参照ください。
https://web2.official.jp/dxf-color
すべての3DFACEエンティティに対して上記のように色を付与することで各面に任意の色を指定することができます。
以下が各面に色を付与したアニメーション結果です。
その他のCADデータについて
OpenModelica1.14ではstl形式も読み込むことが出来ましたが、OpenModelica1.17などの近年のバージョンではstl形式では読み込めなくなっています。
サンプル - 読み込めなかった球体のdxfファイル
FreeCAD0.17からエクスポート
0
SECTION
2
HEADER
9
$ACADVER
1
AC1009
9
$INSBASE
10
0.0
20
0.0
30
0.0
9
$EXTMIN
10
0.0
20
0.0
30
0.0
9
$EXTMAX
10
0.0
20
0.0
30
0.0
0
ENDSEC
0
SECTION
2
TABLES
0
TABLE
2
VPORT
70
0
0
ENDTAB
0
TABLE
2
LTYPE
70
1
0
LTYPE
2
CONTINUOUS
70
0
3
Solid line
72
65
73
0
40
0.0
0
ENDTAB
0
TABLE
2
LAYER
70
1
0
LAYER
2
0
70
64
62
7
6
continuous
0
ENDTAB
0
TABLE
2
STYLE
70
1
0
STYLE
2
STANDARD
70
0
40
0
41
1.0
50
0.0
71
0
42
1
3
ARIAL.TTF
4
0
ENDTAB
0
TABLE
2
VIEW
70
0
0
ENDTAB
0
ENDSEC
0
SECTION
2
BLOCKS
0
BLOCK
8
0
2
BODY
70
0
10
0.0
20
0.0
30
0.0
3
BODY
0
ARC
8
0
62
0
10
-0.134419
20
-0.0668745000002
30
0.0
40
10.1658212259
50
-89.2423764243
51
89.2423764243
0
POLYLINE
8
0
62
0
70
0
66
1
10
0.0
20
0.0
30
0.0
0
VERTEX
8
0
10
7.46069872548e-14
20
10.098058
30
0.0
0
VERTEX
8
0
10
-3.81688927076
20
9.29961552308
30
0.0
0
VERTEX
8
0
10
-7.05237412277
20
7.12297565149
30
0.0
0
VERTEX
8
0
10
-9.23039076573
20
3.88841000452
30
0.0
0
VERTEX
8
0
10
-10.030456395
20
0.0718542423694
30
0.0
0
VERTEX
8
0
10
-9.33484658239
20
-3.76511048289
30
0.0
0
VERTEX
8
0
10
-6.83684534597
20
-7.46589522669
30
0.0
0
VERTEX
8
0
10
-1.7763568394e-15
20
-10.231807
30
0.0
0
SEQEND
8
0
0
ENDBLK
0
ENDSEC
0
SECTION
2
ENTITIES
0
INSERT
2
BODY
8
0
62
0
10
0.0
20
0.0
30
0.0
0
ENDSEC
0
EOF