C#

複数のキーを利用できるConditionalWeakTableクラス

C#

下記記事にて、2つのキーを利用できるWeakTableを実装してみました。 2つのキーを利用できるConditionalWeakTableクラス - 何でもプログラミング今回は3,4個と拡張しやすいように、複数個のキーを利用できるWeakTableを実装してみたいと思います。 Keysク…

2つのキーを利用できるConditionalWeakTableクラス

C#

.NETのConditionalWeakTableは、キーを弱参照で保持し、キーがGCされたときに自動でキーと値がRemoveされるようになっています。しかし、キーとして複数の参照を持ち、参照のうちどれかがGCされたらRemoveを行うといった使い方はできません。今回は複数の参…

Garbage Collectionを検知する(C#)

C#

通常のプログラミングにおいて、いつGCされたか気にする必要はありませんが、極まれにGCのタイミングで処理をしたい時があります(設計で回避するべきではありますが…)今回はGCを検知する方法を調べてみました。 GC.WaitForFullGCComplete GCクラスの関数を…

glTFファイルの読み込み(WPF3Dで表示)

3Dデータ用のフォーマットは3dsやCOLLADA等たくさん存在しますが、2015年にKhronos GroupよりglTFというフォーマットが公開されました。 GitHub - KhronosGroup/glTF: glTF – Runtime 3D Asset DeliveryJSONベースで記述されていますが、頂点データなどは別…

WPFのクラスで3Dプログラミング

WPFで3Dプログラミングをする場合、通常は裏でDirect3Dを用意してレンダリングを行います。ただ、とても簡単な3D描画を行いたい場合は、WPFが用意する3D描画クラスを利用することができます。今回は簡単な実装をしてみたいと思います。 アプリケーション 今…

WPFでElm Architecture --- Xaml利用しない版 --- 可変個のコントロール --- データによりコントロールの種類変更

下記記事にて可変個のコントロールを表示できるよう実装しました。 WPFでElm Architecture --- Xaml利用しない版 --- 可変個のコントロール - 何でもプログラミングただし、すべてのコントロールが同じで個数のみが可変であったため、今回は入力データによっ…

Throttle(一定時間リクエストがなければ実行をする)の実装

スライダーなどから大量のリクエストが送られてきたときに、全て処理する必要がない場合、一定時間リクエストがなければ最新の値で処理を行うことがあります。ReactiveExtensionにもThrottleオペレータは用意されていますので、普段はこれを利用するので問題…

WPFでElm Architecture --- Xaml利用しない版 --- 可変個のコントロール

下記記事にてXamlを利用しないElm Architectureを実装しました。 WPFでElm Architecture --- Xaml利用しない版 - 何でもプログラミングただし、固定個のコントロールにしか対応していませんでした。今回はGridなどのChildrenを動的に変更できるよう実装して…

WPFでElm Architecture --- Xaml利用しない版

下記記事にて、ViewModelまでをElm Architectureで実装し、Xamlとバインディングしてアプリケーションを作成する方法を紹介しました。 Elm Architectureを利用したMVVM --- C# WPF - 何でもプログラミング今回はXaml部分をC#側で実装したものを作成してみた…

既存のDependencyPropertyの変更を検知する

自前でDependencyPropertyを実装する場合は、Register時にPropertyMetadataを渡すことで、値の変更時にコールバックを呼び出すことが可能となります。しかし既存のDependencyPropertyの場合はすでにRegisterされているため、変更を検知するには別のアプロー…

スライダー等からの大量リクエストの、最新値のみを別スレッド処理する

C#

下記のような、スライダーの存在するアプリケーションを作成し、スライダーの値が変わる度に何かの処理をするとします。 もしこの処理が重たい場合、普通に実装しただけでは、UIのレスポンスが悪くなってしまいます。 slider.ValueChanged += (s, e) => Thre…

Functional Reactive Programming + MVVMでのUserControl --- C# WPF

下記記事にてFRPライブラリのSodiumとWPFを連携させてみました。 Functional Reactive Programming + MVVM --- C# WPF - 何でもプログラミング今回はUserControlでも利用できるよう実装してみたいと思います。 アプリケーションコード いつも通り、カウンタ…

Functional Reactive Programming + MVVM --- C# WPF

下記記事にて、Functional Reactive ProgrammingライブラリであるSodiumとWPFを連携させました(F#) SodiumでFunctional Reactive Programming (F#) --- WPF連携 - 何でもプログラミング今回は、C#にてSodiumとWPFを連携させてみたいと思います。 アプリケ…

Elm Architectureを利用したMVVMでのUserControl --- C# WPF

下記記事にて、C#でElm Architectureを利用してWPFアプリケーションを作成しました。 Elm Architectureを利用したMVVM --- C# WPF - 何でもプログラミング今回はElm ArchitectureでUserControlを実装してみたいと思います。F#版での実装は下記記事を参照して…

Elm Architectureを利用したMVVM --- C# WPF

下記記事にてF#でElm ArchitectureをWPFに導入してみました。 F#でWPF --- Elm Architectureを利用したMVVM - 何でもプログラミング今回はC#で近いものを実装してみたいと思います。F#の方ではサポートしたModel→ViewModelの変換は省略していますので、必要…

C# Immutableオブジェクト 導出項目のキャッシュ機能

C#

例として下記のようなVector2クラスを考えます。Lengthプロパティは、呼び出される毎に計算を行っています。処理が軽い場合は特に問題ありませんが、導出に時間がかかるプロパティは結果をキャッシュしてあるほうが好ましいです。今回はキャッシュを行う機能…

ImmutableオブジェクトのJSONシリアライズ、デシリアライズ(C#)

C#

今回はNewtonsoft.Jsonを利用して、Immutableオブジェクトをシリアライズ、デシリアライズしてみたいと思います。.NetにはDataContractJsonSerializerが標準で用意されていますが、DataContract、DataMember属性を付加する必要があり、動作のカスタマイズが…

ネストしたImmutableオブジェクトの更新(C#)

C#

C#(7.0)でImmutableクラスを作成する場合、下記のような記述になります。 public class Person { public int Age { get; } public string Name { get; } public Person Child { get; } public Person(int age, string name, Person child) { Age = age; Na…

WPF --- Bindingで配列をObservableCollectionに変換

現状、ItemsControlのItemsSourceに通常の配列をバインドした際、配列を新しくする度にコントロールが全て再作成されます。通常の配列の代わりにObservableCollectionをバインドすることにより、変更箇所のみViewが更新されるようになります。(要素の追加で…

AttachedProperty定義の記述量削減

下記記事にて、依存プロパティの定義の記述量を削減しました。 DependencyProperty定義の記述量削減 - 何でもプログラミング今回は同様に、添付プロパティの記述量を削減してみたいと思います。素のままでは下記のような記述になり、エディタ上で"propa"とタ…

LINQ独自オペレータ メモ

C#

C#のIEnumerableには、SelectやAggregateなど様々なオペレータが用意されています。本記事では、あったら便利な独自のオペレータを定義してメモしたいと思います。随時更新予定です。 ForEach なんだかんだで、やっぱりあると便利です。 public static void …

T4でImmutableクラスコンストラクタ作成(C#)

T4 C#

C#(7.0)でImmutableクラスを作成する際、下記のような記述が必要になります。 public class Person { public string Name { get; } public int Age { get; } public Person(string name, int age) { Name = name; Age = age; } } F#のレコードと異なり、コ…

DependencyProperty定義の記述量削減

独自のDependencyPropertyを定義する際、コールバックも含めると下記のような記述になります。 public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(int), typeof(Counter), new PropertyMetadata(0, (…

WPFでマウスドラッグイベント

WPFにはデフォルトでドラッグのイベントは用意されていません。今回はドラッグ用のイベントを実装してみたいと思います。記事内で利用しているObservableクラス、Disposeクラス、Subscribe関数は下記記事を参照してください。 C# eventをIObservableに変換 -…

C# eventをIObservableに変換

C#

eventからIObservableへの変換は、下記のRxのFromEvent関数にて行えます。 NuGet Gallery | Reactive Extensions (Rx) - Main Library 3.1.1今回は、Rxを導入するほどでもないとき用に、シンプルなものを自前で実装してみたいと思います。 Observer、Observa…

WPFとDirect3D11の連携 --- テクスチャ貼り付け

下記記事にて三角形を描画するところまで記述しました。 WPFとDirect3D11の連携 --- 三角形描画 - 何でもプログラミング今回はテクスチャを貼り付けて表示してみたいと思います。 Texture作成 Direct3D9側でD3DFMT_A8R8G8B8にてレンダリングターゲットを作成…

WPFとDirect3D11の連携 --- 三角形描画

下記記事にてWPFとDirect3D11を連携してサーフェスを表示しました。 WPFとDirect3D11の連携 --- 導入 - 何でもプログラミング今回は単純な三角形を描画してWPFで表示してみたいと思います。 Shader作成(csoから) csoデータが存在する場合は、下記関数のみ…

WPFとDirect3D11の連携 --- 導入

下記記事にてWPFとDirect3D9Exを連携する方法を記述しました。 WPFとDirect3D9Exの連携 --- 導入 - 何でもプログラミング最近ではDirect3D11の利用がメジャーになっていますので、今回はWPFとDirect3D11を連携させてみたいと思います。WPF自体はDirect3D9で…

WPFとDirect3D9Exの連携 --- テクスチャ貼り付け

下記記事にて三角形を描画するところまで実装しました。 WPFとDirect3D9Exの連携 --- 三角形描画 - 何でもプログラミング今回はさらにテクスチャを貼り付けを実装してみたいと思います。本記事で利用している、CreateVertexShader、CreatePixelShader、Creat…

WPFとDirect3D9Exの連携 --- 三角形描画

下記記事にてIDirect3DSurface9をWPFで表示しました。 WPFとDirect3D9Exの連携 --- 導入 - 何でもプログラミング今回は単純な三角形を描画してWPFで表示してみたいと思います。本記事で利用しているAssertHR、CliComPtr、CreateDevice、CreateRenderTargetに…