機能構成

MoNo.RAIL を機能単位で分けると、下記の4つとそれらを統合する部分に分けられます。

  • MVVM Framework 機能
  • OpenGL View 機能
  • OperationDriver 機能
  • Geometry Library 機能
../../_images/features.png

MVVM Framework 機能

一般に、WPF アプリケーションは MVVM (Model-View-ViewModel) と呼ばれるアーキテクチャパターンに則って設計することが推奨されます。

主に MoNo.Framework.FSharp.dll の中に MVVM Framework としての機能が実装されています。まず 3D ビューとは無関係に純粋な MVVM Framework としての機能があり、その上に 3D ビューとの統合機能が実装されています。

詳しくは次を参照: WPF/MVVM Framework として使う

OpenGL View 機能

OpenGL による 3D 描画機能を備えています。

MoNo.OpenGL.dll が最も低レイヤーに位置する部分で、OpenGL API の薄いラッパー機能を提供します。また OpenGL 描画が可能な Windows Forms コントロール GLControl も提供します。

MoNo.Framework.dll の MoNo.Graphics namespace が次に位置するレイヤーです。 投影行列(Projection Matrix)やモデルビュー行列の設定、IScene インターフェイスやシーングラフ、マウスによるビュー操作などといった機能を提供します。

詳しくは次を参照: OpenGL ビューとして使う

OperationDriver 機能

例えば CAD アプリケーションの作図機能などでは、複雑なマウスオペレーションの実装が要求されます。作図のアクションのたびに状態遷移が発生するため、素朴なインベントドリブン方式に頼っているとコードがスパゲッティ化し、適切にマウスイベントを捌くことが難しくなります。

また、3D ビュー内にマウス操作が可能なコントロール(MoNo.RAILでは Handle と呼んでいます)を表示し、ユーザーがそれをクリックしたりドラッグしたりしてオブジェクトを操作したい、というニーズもあります。こういった処理をビューのマウスイベントから書き起こしているとコードがスパゲッティ化し管理しきれなくなります。

こういった複雑なマウスオペレーションを上手に管理するための機構として、OperationDriver という仕組みを用意しています。

詳しくは次を参照: OperationDriver 周辺の仕組みについて

Geometry Library 機能

MoNo.dll は、2次元や3次元の点、ベクトル、行列などといった演算ライブラリを提供します。

MoNo.Geometries.dll は、折れ線、点群、メッシュ、ハーフエッジ構造といった幾何オブジェクトのデータ型と演算処理を提供します。

詳しくは次を参照: 幾何ライブラリとして使う

統合された Framework 機能

MoNo.Framework.FSharp.dll の一部と MoNo.Studio.dll や MoNo.Studio.Views.dll が、上記4つの個別の機能を1つに統合し典型的な MoNo.RAIL アプリケーションの開発をサポートします。