grasp プラグイン(Choreonoid プラグイン)プログラミングのちょっとしたテクニック集です。
BodyItem::load を使って VRML モデルファイルを読み込むことができるが、プロジェクトファイルにすでにそのモデルが存在する場合、同じモデルが二つ出てきてしまう。
この状態でプロジェクトをセーブして、またChoreonoid を起動すると、今度は三つのモデルが現れる。
これを回避するには、RootItem::findItem メソッドで、モデルが存在しないことを確認すれば良い。
以下は、名前 name を持つモデルが存在しない場合、ファイル wrlhrpfile からモデルを読み込む関数 getItem の例。
BodyItem * getItem(string name, string wrlhrpfile) { // ルートアイテムをチェック BodyItem * item = RootItem::instance()->findItem8 (name); if (item == NULL) { // なければ登録 item = new BodyItem(); if (item->load(wrlhrpfile, "OpenHRP-VRML-MODEL")) { mout << "load: " << wrlhrpfile << endl; RootItem::mainInstance()->addChildItem(item); ItemTreeView::mainInstance()->checkItem(item, true); } } return item; }