========================================================== 機能構成 ========================================================== MoNo.RAIL を機能単位で分けると、下記の4つとそれらを統合する部分に分けられます。 - MVVM Framework 機能 - OpenGL View 機能 - OperationDriver 機能 - Geometry Library 機能 .. image:: features.png MVVM Framework 機能 ========================================================== 一般に、WPF アプリケーションは MVVM (Model-View-ViewModel) と呼ばれるアーキテクチャパターンに則って設計することが推奨されます。 主に MoNo.Framework.FSharp.dll の中に MVVM Framework としての機能が実装されています。まず 3D ビューとは無関係に純粋な MVVM Framework としての機能があり、その上に 3D ビューとの統合機能が実装されています。 詳しくは次を参照: :doc:`../wpf/index` OpenGL View 機能 ========================================================== OpenGL による 3D 描画機能を備えています。 MoNo.OpenGL.dll が最も低レイヤーに位置する部分で、OpenGL API の薄いラッパー機能を提供します。また OpenGL 描画が可能な Windows Forms コントロール ``GLControl`` も提供します。 MoNo.Framework.dll の MoNo.Graphics namespace が次に位置するレイヤーです。 投影行列(Projection Matrix)やモデルビュー行列の設定、``IScene`` インターフェイスやシーングラフ、マウスによるビュー操作などといった機能を提供します。 詳しくは次を参照: :doc:`../opengl/index` OperationDriver 機能 ========================================================== 例えば CAD アプリケーションの作図機能などでは、複雑なマウスオペレーションの実装が要求されます。作図のアクションのたびに状態遷移が発生するため、素朴なインベントドリブン方式に頼っているとコードがスパゲッティ化し、適切にマウスイベントを捌くことが難しくなります。 また、3D ビュー内にマウス操作が可能なコントロール(MoNo.RAILでは Handle と呼んでいます)を表示し、ユーザーがそれをクリックしたりドラッグしたりしてオブジェクトを操作したい、というニーズもあります。こういった処理をビューのマウスイベントから書き起こしているとコードがスパゲッティ化し管理しきれなくなります。 こういった複雑なマウスオペレーションを上手に管理するための機構として、OperationDriver という仕組みを用意しています。 詳しくは次を参照: :doc:`../operation/index` Geometry Library 機能 ========================================================== MoNo.dll は、2次元や3次元の点、ベクトル、行列などといった演算ライブラリを提供します。 MoNo.Geometries.dll は、折れ線、点群、メッシュ、ハーフエッジ構造といった幾何オブジェクトのデータ型と演算処理を提供します。 詳しくは次を参照: :doc:`../geometry/index` 統合された Framework 機能 ========================================================== MoNo.Framework.FSharp.dll の一部と MoNo.Studio.dll や MoNo.Studio.Views.dll が、上記4つの個別の機能を1つに統合し典型的な MoNo.RAIL アプリケーションの開発をサポートします。