-
Notifications
You must be signed in to change notification settings - Fork 4
Developper's manual
siren 開発者向けのマニュアルです。
LICENSE ... ライセンスファイル
doc/ ... ドキュメンテーション
examples/ ... サンプルコード
inc/ ... C/C++ ヘッダー
mrblib/ ... Ruby スクリプトファイル
src/ ... C/C++ ソースコード
test/ ... テストファイル
viewer/ ... STLLoader ビューア(WebGL/three.js)
README.md ... Readme
mrbgem.rake ... ビルド設定
MIT ライセンスの文章。コピーライト表記や年が変わった場合のみ修正します。
siren に関するドキュメント置き場。ただし、現在は仕様が大きく変わり、オンライン情報との整合性も取りづらい(手がまわらない)ため、中にはオンラインを参照するようリンクのみを記述したファイルがあるだけです。
siren で動くサンプルコード。リリースバージョンを作成する際、最低限このスクリプトは動くようにしています。今のところテストコードも兼用しています。
C および C++ で記述した siren のコア部分のファイル置き場。Rake 時にこのディレクトリを参照します。
このディレクトリにある Ruby スクリプトは、Rake 時にバイトコードに変換され、実行バイナリの内部に格納されます。 C または C++ で書く必要がない機能はこちらに入っています。
機能の単体テスト用のファイル置き場。今のところ、テストコードはメンテされていません。(つまり、実装側の変更がすべてのテストコードにフィードバックされているわけではありません)
- コードは C99 および C++11 に準拠しています。
Siren モジュールに新しいクラスメソッド(C++でいうスタティック関数のような呼び出しが可能なもの)を追加するには、次の手順を行います。
ソースコード名はほとんどが OCCT のツールキット名に対応しています。例えば、TKTopAlgo だった場合、ソースコードは topalgo.cpp ヘッダーファイルは topalgo.h になります。siren は、C/C++ で記述する部分を OCCT 側へのラッパーとして最低限にする方針です。そのため、ツールキット名に対応させています。ただし、複数の API を組み合わせたり、どのツールキットにも該当しない場合はこの限りではありません。また、Ruby 側に出しているクラスもツールキット名にはなりません。
例として topalgo.cpp を選択したとします。
OCCT の呼び出しを行う以上、関数内では C++ を用いていますが、C++ である必要がない部分は C の静的関数として実装します。siren 独自の C++ クラスは作っていません。例として test というメソッドを追加します。
-
topalgo.h に、関数宣言を追加します。
mrb_value siren_topalgo_test(mrb_state* mrb, mrb_value self);
- 仮引数は上記のように宣言します。これは Ruby のメソッドとして呼び出すための共通インターフェイスとなっているため、変更はできません。
- 関数名は、siren 独自のものは siren_ から始めます。mruby 由来のものは、すべて mrb_ 接頭辞が付いています。
-
OCCT のヘッダーファイルが必要な場合は、ヘッダー内に追記します。
#include <TopoDS_Shape.hxx>
-
topalogo.cpp に、関数の実体を追加します。
mrb_value siren_topalgo_test(mrb_state* mrb, mrb_value self) { return mrb_nil_value(); }
上記の関数は、Ruby の Nil オブジェクトを返します。