モジュール構成

依存関係

MoNo.RAIL の古いバージョンは C# で開発されており、その後のバージョンアップで F# によって機能追加や改良が図られた、という経緯があります。そのため、C# で書かれた旧来からの層と、その上に乗せられた F# による新しい層があります。 大きく次の3つの層に分けられます。

  • C# 層
    古いバージョンから受け継がれた旧来からある層。 (旧来から存在しているというだけで、機能追加やメンテナンスは継続されています)
  • F# 層
    新しく F# によって機能を上乗せしている層。 関数型プログラミングを意識した設計となっています。
  • MoNo.Studio 層
    WPF を使って開発する典型的な MoNo.RAIL アプリケーションの雛形やツールの層。 3Dビューに代表される各種 WPF コントロールと、それらと接続するビューモデルなどが用意されています。C# と F# の両方が利用されています。

以上を踏まえ、MoNo.RAIL を構成する主なモジュール(アセンブリ)の依存関係を下図に示します。

../../_images/assemblies.png

C# 層

  • MoNo.dll (MoNo namespace)
    3次元または2次元のベクトルや行列のライブラリです。
  • MoNo.OpenGL.dll (MoNo.OpenGL namespace)
    OpenGL の薄いラッパーです。
    • GL … OpenGL API を P/Invoke するだけの関数群
    • MGL … OpenGL を .NET から使いやすくするため薄くラップした関数群
  • MoNo.Basics.dll
    • MoNo.Core namespace
      主に Undo/Redo 機能が実装されています。 それ以外にも多くのクラスが定義されていますが、その大半は旧バージョンからの互換性のために残されているレガシーなクラスですので、現在は推奨されません。
    • MoNo.IO namespace
      シリアライズ機能が用意されています。 作法に従ってシリアライザを定義すると、アプリケーション独自のデータをバイナリ形式でシリアライズすることができます。
    • MoNo.Setting namespace
      アプリケーションの設定値の入出力機能。 XML形式で設定値を読み書きします。
    • MoNo.Xml namespace
      旧来からのXML形式によるシリアライズ機能。 現在は基本的には MoNo.IO に定義されているバイナリ形式のシリアライザを利用することが推奨されます。ただし、MoNo.Setting による設定値の読み書きにはXML形式のシリアライザが利用されます。
  • MoNo.Framework.dll
    • MoNo.Graphics namespace
      OpenGL のビューコントロールや、シーングラフ、シーンのプラグイン機構など。
    • MoNo.Ctrl namespace
      3D ビュー上のマウスオペレーションを扱うための機能。
  • MoNo.Wpf.dll (MoNo.Wpf namespace)
    3Dビューの WPF コントロールや、XAML上で Binding 可能なシーングラフなど。

F# 層

  • MoNo.FSharp.dll (MoNo namespace)
    • Immutarray … immutable な配列型
    • Reactive … 保持する値の変更がリアクティブに通知・伝播される型
    • Cont … 継続モナド
    • etc
  • MoNo.Framework.FSharp.dll
    MVVM Framework としての機能と、それを OpenGL ビューと統合する機能。
  • MoNo.Geometries.dll (MoNo.Geometries namespace)
    折れ線やメッシュなどの幾何データ型とその演算機能。
  • MoNo.Geometries.Plugin.dll
    MoNo.Geometries.dll で定義されている幾何データ型を描画したりシリアライズしたりするプラグイン。

MoNo.Studio

  • MoNo.Studio.dll
    典型的な MoNo.RAIL アプリケーションのためのビューモデルの雛形クラスや、便利なツール群。
  • MoNo.Studio.Views.dll
    典型的な MoNo.RAIL アプリケーションのための WPF コントロール群。