STEPを読み込めないでしょうか?

3D CADで作成された形状データをbodyファイルに読み込むことを試みています.
STLは読み込めましたが,STEPはダメでした.

Choreonoidは,CMakeでENABLE_ASSIMPにチェックを入れてビルドしています.Assimpのドキュメントの Importersの一覧にはSTPが含まれていますが,bodyファイルでSTEPを読み込むことはできないのでしょうか?

CADファイルの読み込みについてはChoreonoidの産業利用においても要望がありますので、今後なんらかのかたちで対応したいと思っています。

AssimpがSTEPに対応しているとは知りませんでした。ChoreonoidのAssimp利用においては、こちらでファイルを読み込んで使えることを確認したフォーマットだけ対応するようにしています。STEPについてはそこがなかったので対応していませんでした。

Choreonoidソースの src/AssimpSceneLoader/AssimpSceneLoader.cpp に、

void AssimpSceneLoader::initializeClass()
{
    SceneLoader::registerLoader(
        "dae;blend;x;obj;dxf",
        []() -> shared_ptr<AbstractSceneLoader> { return std::make_shared<AssimpSceneLoader>(); });
}

という部分があるかと思います。ここに拡張子を記載しているフォーマットについては、Choreonoidからの読み込み対象となります。まずは試しにここにSTEPの拡張子を追加して試してもらえますでしょうか。AssimpでSTEPがちゃんと読めるのであれば、Choreonoidにも読み込めるようになるはずです。

教えていただいたファイルの "dae;blend;x;obj;dxf""dae;blend;x;obj;dxf;stp" に変更して,ビルドし直しました.

メニューのファイル→読み込み→ボディで,STEPのファイルを指定すると,ファイルを読み込んで1秒後ぐらいにChoreonoidが無言で落ちます.そのSTEPファイルをSTLファイルに変更したものを同じ手順で読み込むと,シーンビューに表示されます.

Assimpライブラリは,5.0.1を自分でビルドしたものを使っています.

なお,本題とはずれますが,ファイル→読み込み→ボディでも,日本語のファイル名を指定すると,「ファイル “日本語を含むパス名” を開けません.→ 失敗」となります.

メニューのファイル→読み込み→ボディで,STEPのファイルを指定すると,ファイルを読み込んで1秒後ぐらいにChoreonoidが無言で落ちます.

そうでしたか…Assimpに少し期待はしていたのですが、残念ではあります。
ただChoreonoidが無言で落ちるとのことなので、Assimpを呼び出しているコードにも何か問題があるかもしれませんね。もし差し支えなければ、調査のためそのSTEPファイルをお貸しいただけないでしょうか?もし公開しても問題がないもので、サイズもそれほど大きくなければ、ここに添付していただいても結構です。もし何か問題があれば、私まで直接送っていただいても結構です。
読み込めるようになる保証はありませんが、ダメ元でよければ調査してみます。

なお,本題とはずれますが,ファイル→読み込み→ボディでも,日本語のファイル名を指定すると,「ファイル “日本語を含むパス名” を開けません.→ 失敗」となります.

こちらも升谷先生にご指摘いただいた「日本語を含むパスにインストールすると動作しない」問題と同じ問題かと思います。そして以下でもお知らせしたように、その問題は修正できたのではないかと思いますので、お試しいただけますでしょうか。

https://discourse2.choreonoid.org/t/topic/382

中岡様,

もし差し支えなければ、調査のためそのSTEPファイルをお貸しいただけないでしょうか?もし公開しても問題がないもので、サイズもそれほど大きくなければ、ここに添付していただいても結構です。もし何か問題があれば、私まで直接送っていただいても結構です。
読み込めるようになる保証はありませんが、ダメ元でよければ調査してみます。

ROBOTIS社の小型ヒト型ロボットのモデルを作ろうと考えていて,試しているSTEPファイルはROBOTIS社が公開しているものです.具体的には,以下のURLのものです.

http://en.robotis.com/service/downloadpage.php?ca_id=70g0

日本語を含むパス名への対応をありがとうございます.後ほど私の環境でもビルドし直して試してみます.

情報ありがとうございます。本件調査しました。調査の環境はUbuntu 20.04で、aptで入るAssimp 5.0.1 を使用しています。これが現在Assimpの最新バージョンのようです。
http://assimp.org/index.php/downloads

結論から言うと、Assimpは最新版でもSTEPファイルをサポートしていないのではないかと思います。

これについて、どこで記述されていましたでしょうか?

以下のマニュアル
https://assimp-docs.readthedocs.io/en/latest/about/introduction.html
にある

IFC-STEP ( .ifc )

のことかなと思ったのですが、こちらは確かにSTEPというワードも入っていますね。ただIFCというのがついていますよね。こちらが本当にSTEPファイルなのか少し疑問です。拡張子もstpではなくてifcとなっていますし。

これ以外には私の方でそれらしき記述をみつけることができませんでした。

お知らせいただいたページのSTEPファイルを読み込んでみたところ、assimpの関数が少しおかしな挙動をしていました。AssimpではReadFileという関数でメッシュを読み込むのですが、読み込まれたらaiScene型の構造体が返り、失敗したらnullが返るはずです。しかし構造体自体はnullではなくて存在するのに、その中身は全て空(メンバがほぼ全てnull)という状態になっていました。Assimpのマニュアルを読む限り、この挙動は仕様を満たしていません。ただこのような状況のときにも落ちないことが望ましいので、落ちないように以下の修正をしておきました。

ただ上記の状況をみた感じでは、Assimpは最新版でもSTEPには対応していないようにみえます。

なお、CADファイルを読み込めるようにすることへの要望は多いので、今後STEPやIGESといったCADの共通フォーマットには対応したいと思っています。ただこれらのファイルはCADだけあって内容は複雑で、また読み込んだデータもメッシュに変換するのではなくて本来のCAD的なベクトルデータとして扱うことが望ましいので、そこまでするとなるとけっこう大変な作業になりそうです。そして、対応した場合は商用機能にしてリリースする可能性が高いです。今のところそのようなことを考えております。

以下のドキュメントの Importersの一覧の中にSTPがあるので,STEPファイルにも対応しているのだと思いました.それ以上のことは調べられていません.

情報ありがとうございます。なるほど、Assimpのソースの中にドキュメントのディレクトリがあったのですね。確かにSTPというのがありますね。

ソースをみたところ、以下が該当するソースなのではないかと思いました。

他にSTEPのExporterと思われるディレクトリもありますね。

バージョン5.0.1ではなくて、最新の開発版をgit cloneでとってきて使えば、STEPも読み込めたりするのでしょうか。すみません、ちょっと今そこまで試すのは難しいのですが、もし可能でしたら試してみていただけるとうれしいです。少なくとももうChoreonoidはこの件では落ちなくはなったはずですので…。