スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

デザインドール

デザインドールというソフトの紹介。

3Dのモデルを動かしてデッサン人形代わりにしたり3Dモデルを書き出せるソフト。
頭身や筋肉のつき方が変えられるのも特徴。

http://terawell.net
読み込み以外のほぼすべての機能が無料で使える。

・デッサンなどのポーズ集は好きなポーズがなかなか見つからない
・3Dソフトは無駄に覚える事が多すぎて面倒

と言う人には是非お勧め

スポンサーサイト

C#で関数の途中で処理を中断→再開する方法

ループ処理の最中でメインスレッドの流れを止めずにある関数を中断しておきたいことはたまにありますよね?
俗にいうコルーチンってやつですな。

このような時、C#ではyieldってものを使って実装できるっぽい!

早速調べてみたのでサンプルを。
こんな感じにIEnumerator を返す関数をコルーチンのように見立てて利用。
        static IEnumerator TestAction = GetTestAction();
static IEnumerator GetTestAction()
{
while (true)
{
Console.WriteLine("1");
yield return null;
Console.WriteLine("2");
yield return null;
Console.WriteLine("3");
yield return null;
}
}

上記を使う時はループ処理の中でこんなかんじに。
            while (true)
{
Console.Write("A");
TestAction.MoveNext();
Thread.Sleep(1000);
}


実行すると1秒ごとに
A1
A2
A3
A1
A2
A3

とちゃんと表示されてますね。
結構便利?!
try catchの中では使えないみたいなのでご注意を。


実行する手順は決まってるけどあるステータスの時だけ処理を止めたい・・・でもメインの流れを止めたくない・・・。
そん時に便利な機能だと思います!
実際に使う時はこんな感じになるのかな
        static IEnumerator TestAction = GetTestAction();
static IEnumerator GetTestAction()
{
while (true)
{
startAction();
while (state == hoge)//一定の状態の場合は待機
{
yield return null;
}
endAction();
yield return null;
}
}


ねよっと。

Reactive Extensions

C#にてイベントを制御する際に「Reactive Extensions」に興味を持ったので調べてみた


【まずはインストール方法】
プロジェクトを右クリック → NuGetパッケージの管理 から Reactive Extensionsを探してInstall


【イベントの扱い方】
Rxでイベントを扱うためにはIObservableオブジェクトの作成が必要
Observableクラスにstaticな生成関数が用意されている
調査してみると
FromEvent
FromEventPattern

の二種類がある

二つの関数を歴史的にみると名前が置き換わってたりしていて結構ややこしい
似たようなことをしてるけどFromEventPatternのほうがすっきり書けることが多い

マウスダウンイベントをIObservableオブジェクトへと変換する場合以下のようになる

Observable.FromEventPattern
var mouseDown = Observable.FromEventPattern(this, "MouseDown");

Observable.FromEvent
var mouseDown = Observable.FromEvent(
h => (s, e) => h(e),
h => this.MouseDown += h,
h => this.MouseDown -= h);



【ドラッグ中に座標表示&離したらCompletedと表示するサンプル】
var mouseDown = Observable.FromEventPattern(this, "MouseDown");
var mouseUp = Observable.FromEventPattern(this, "MouseUp");
Observable.FromEventPattern(this, "MouseMove")
.SkipUntil(mouseDown)
.TakeUntil(mouseUp)
.Finally(() => textBlock.Text = "Completed")
.Repeat()
.Select(e => e.EventArgs.GetPosition(null))//座標を送る
.Subscribe(p => textBlock.Text = string.Format("X: {0}, Y:{1}", p.X, p.Y));
SkipUntil = 引数のIObservableから値が発行されるまで通行禁止
TakeUntil = 引数のIObservableから値が発行されるまで通行許可
Finally = 一連の処理が終わったタイミングで実行される
Repeat = Until系の制御を復活させるために追加(Finallyの後ろじゃないとダメ)

圧倒的にシンプルに書ける・・・ラムダ式との相性も抜群ですな
Doメソッドで目的のタイミングに処理を追加できるので、画面外でもキャプチしていたい場合は以下のようになる
.SkipUntil(mouseDown.Do(_ => this.CaptureMouse()))
.TakeUntil(mouseUp.Do(_ => this.ReleaseMouseCapture()))


【時間制御まわり】
イベントを流す際に時間を制御するものも豊富に用意されている
例)
Delay = 遅れて流す(指定時間経過してから流す)
Throttle = 落ち着いたら流す(指定した時間内に値がなければ値を流す)
Buffer = まとめて流す(指定時間内は値を溜めて最後にまとめて流す)
Timeout = 観測時間にリミットを付ける(指定した時間内に値がなければエラーにする)


【ファイルの更新監視サンプル】
FileSystemWatcherは書き込み時に複数のChangeイベントが発生して制御が面倒
そんなときはRXで解決!
var watcher = new FileSystemWatcher("C:\\", "test.txt") { EnableRaisingEvents = true };
var changed = Observable.FromEventPattern(watcher, "Changed")
.Throttle(TimeSpan.FromSeconds(1))
.Subscribe(_ => hogehoge);
Throttlenにより書き込みが落ち着いた時点でイベントが発行される




Rxはちょっと資料が少ないけれどかなり強力なライブラリなので今後も要チェックかも
日本語資料が少ない中、こちらのサイトにはお世話になりました
感謝感謝

ねよっと。

乗算の計算式

プログラム上での乗算ブレンドの計算式

bg=背景 add=重ねるテクスチャ a=アルファ値
( add - bg ) * a + bg
bg * (1 - a) + add * a とも書ける

ベクトルで考えると忘れないことに気付いた
・・・けどそのことを忘れるのでメモしておいた

ねよっと

SQLの勉強

DBに関する勉強をする機会があったのでSQLの仕組みを忘れないようにざっとメモ。


SELECT 抽出する項目を指定
FROM どこのテーブルを使うか (AS ~で名前を置き換え)
INNER JOIN 他のテーブルがID等で紐付いていて条件に含めたいときに使う ※
WHERE 抽出するものを条件で絞る
AND WHEREだけで条件が書ききれない場合はANDで繋ぐ
ORDER BY 昇順
LIMIT 抽出する数


※WordPressのカスタムフィールドがいい例
INNER JOINはIDが両方のテーブルに存在するものだけ抽出する
JOINしたテーブルにIDが存在しないものも抽出したい場合はLEFT JOIN を使う(NULLが割り当てられる)


WordPressで使うときの例
SELECT p.ID
FROM $wpdb->posts AS p
INNER JOIN $wpdb->postmeta AS meta ON meta.post_id = p.ID AND meta.meta_key = 'カスタムフィールド名'
WHERE p.post_status = 'publish' //公開中だとか~
AND p.post_type = 'post' //投稿の種類で条件を絞ったり
ORDER BY cast(meta.meta_value as unsigned) DESC //カスタムフィールドをCastして昇順の条件にしたり~
LIMIT 5 //5件取り出す


ねよっと。
プロフィール

Author:あしゅ
ぷぃぷぃ日常。
いつのまにか雑記ブログに。

カテゴリ
最新記事
検索フォーム
最新コメント
リンク
このブログをリンクに追加する
ブロとも申請フォーム

この人とブロともになる

カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。