Skip to content

Developper's manual

Daisuke YAMAGUCHI edited this page Sep 5, 2016 · 14 revisions

siren 開発者向けのマニュアルです。

構成

LICENSE      ... ライセンスファイル
doc/         ... ドキュメンテーション
examples/    ... サンプルコード
inc/         ... C/C++ ヘッダー
mrblib/      ... Ruby スクリプトファイル
src/         ... C/C++ ソースコード
test/        ... テストファイル
viewer/      ... STLLoader ビューア(WebGL/three.js)
README.md    ... Readme
mrbgem.rake  ... ビルド設定

LICENSE ライセンスファイル

MIT ライセンスの文章。コピーライト表記や年が変わった場合のみ修正します。

doc ドキュメンテーション

siren に関するドキュメント置き場。ただし、現在は仕様が大きく変わり、オンライン情報との整合性も取りづらい(手がまわらない)ため、中にはオンラインを参照するようリンクのみを記述したファイルがあるだけです。

examples サンプルコード

siren で動くサンプルコード。リリースバージョンを作成する際、最低限このスクリプトは動くようにしています。今のところテストコードも兼用しています。

inc および src

C および C++ で記述した siren のコア部分のファイル置き場。Rake 時にこのディレクトリを参照します。

mrblib Ruby スクリプトファイル

このディレクトリにある Ruby スクリプトは、Rake 時にバイトコードに変換され、実行バイナリの内部に格納されます。 C または C++ で書く必要がない機能はこちらに入っています。

test テストファイル

機能の単体テスト用のファイル置き場。今のところ、テストコードはメンテされていません。(つまり、実装側の変更がすべてのテストコードにフィードバックされているわけではありません)

カスタマイズ

  • コードは C99 および C++11 に準拠しています。

Siren モジュールに C++ でメソッドを追加する

Siren モジュールに新しいクラスメソッド(C++でいうスタティック関数のような呼び出しが可能なもの)を追加するには、次の手順を行います。

1. メソッドを追加するソースコードを選択する。

ソースコード名はほとんどが OCCT のツールキット名に対応しています。例えば、TKTopAlgo だった場合、ソースコードは topalgo.cpp ヘッダーファイルは topalgo.h になります。siren は、C/C++ で記述する部分を OCCT 側へのラッパーとして最低限にする方針です。そのため、ツールキット名に対応させています。ただし、複数の API を組み合わせたり、どのツールキットにも該当しない場合はこの限りではありません。また、Ruby 側に出しているクラスもツールキット名にはなりません。

例として topalgo.cpp を選択したとします。

2. 関数の追加。

OCCT の呼び出しを行う以上、関数内では C++ を用いていますが、C++ である必要がない部分は C の静的関数として実装します。siren 独自の C++ クラスは作っていません。例として test というメソッドを追加します。

  1. topalgo.h に、関数宣言を追加します。

    mrb_value siren_topalgo_test(mrb_state* mrb, mrb_value self);

  • 仮引数は上記のように宣言します。これは Ruby のメソッドとして呼び出すための共通インターフェイスとなっているため、変更はできません。
  • 関数名は、siren 独自のものは siren_ から始めます。mruby 由来のものは、すべて mrb_ 接頭辞が付いています。
  1. OCCT のヘッダーファイルが必要な場合は、ヘッダー内に追記します。

    #include <TopoDS_Shape.hxx>

  2. topalogo.cpp に、関数の実体を追加します。

    mrb_value siren_topalgo_test(mrb_state* mrb, mrb_value self) { return mrb_nil_value(); }

上記の関数は、Ruby の Nil オブジェクトを返します。

3. メソッドとして登録

Shape モジュールにメソッドを追加する

Clone this wiki locally