家虎

休日にプログラムを書くサラリーマンです。 Twitterでは書ききれない、プログラムの…

家虎

休日にプログラムを書くサラリーマンです。 Twitterでは書ききれない、プログラムの知見を書き連ねていきます。 独学で習得したのでかなり初級の備忘録になると思います。 完成するまで書く!

最近の記事

角を判定するロジック

お絵かきツールで作成するデータ「線」。 ペンやマウスでさっと画面をなぞれば一本の線ができあがる。 実に簡単な仕組みだ。 ところでその線とはつまり点の集まりである。 そして上図のように手書きの線は非常に汚い。 百戦錬磨の達人なら空気を切り裂く真剣のように正確無比の軌跡を描くことができるが、凡人には無理だ。 それをテクノロジーの力で手軽に実現できるようにしたい(それがこのツールの理念である)。 先ほどのガタガタの線をテクノロジーの力で点を平均化した。株をやっている向きには「移

    • マウスイベント処理のオーダーメイド

      お絵かきソフトに於いて、ポインティングデバイスで出来ること(そしてケアすべきこと)は数多い。 描画はもちろん、選択、変形ツールのドラッグ、Viewの拡縮なんてのもある。 これをどう処理するか。素人プログラマーの長年の命題に挑戦する。 問題点(※データに無関係なイベントはView内で完結させるのでここではMVVMは語らない) 各コントロールで対応されているマウスイベントを普通にコードビハインドで受け取るとこうなる。 private void PreviewM

      • Propertyの自律機能化

        C#のクラス構造にはプロパティという外部アクセス窓口があり、他のクラスやViewとの連携はここに集約される。 非常に便利な仕組みなのだが複数選択時の制御が難しい。 親子階層間の数値継承も難しい。 他のノードを参照する設計も非常に難しい。 要するに複数のノードとの並列制御が非常に難しいのだ。 さてどうしようか。 複数選択時のあるある挙動複数選択時の難しさ、例えばこうだ 二つ選んでAを動かしたとする。 当然この位置関係のまま右に動いて欲しい所だが… 何も考えずにロジックを組

        • TreeViewにバインドするReactiveデータ

          MVVMスタイルでTreeViewにModelをバインドしたい。 しかしどの形式でやればいいのかよく分からん。 いろいろ検証して得た結果をここにメモしておく。 ①うまく行った(ように見える)ヤツ。 いったんこれで行く ②Prism開発で参考になるこのサイトの手法 ReadOnly~というReactivePropertyのナニカに変換している。これがセオリーらしいのだが、ドラッグで順序を入れ替えた際、その情報が元Modelに反映されない。イベントを拾ってコネコネすればいいのだ

        角を判定するロジック

          GongSolutionの怪

          GongSolutionをご存知だろうか。 ListだろうがTreeだろうがGridViewだろうが、お手軽にドラッグ機能を追加してくれるライブラリだ。あの面倒なAdorner管理から解放されるのだ。非常に助かる。 これはNugetからインストールできる。 だが、コードを追うためGitからソースをダウンロードし、自作プロジェクトでビルドしてみると何故かTreeの展開が反応しない。 どうも、選択状態にしたアイテムは無反応になってしまうようだ。 先日検証したテストプロジェクトで

          GongSolutionの怪

          "~またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。"エラーを回避した話

          WPFはVIEWとビジネスコードを(半ば強制的に)分離できるので、構造も思想も作業タスクも整理しやすいが、いかんせんバグが追いにくい(>_<) 今回この難敵を撲滅できたので忘れないようメモする。 今回わけあって、ソースを追いたかったので超便利クラスGongSolutionをインクルードしたのだが、なぜかこのエラーが発生。さあどうする バグ切り分け付属のサンプルプロジェクトでは異常なし(当たり前) 参照周りも異常なし その他、メソッドを削ったり、参照のプロパティを比較し

          "~またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。"エラーを回避した話

          値管理クラスが必要

          例えば、座標を持つクラスがあったとする。 当然そのクラスは「Point」というプロパティを持つ。 しかし、その値を直接値で盛ってしまうとなにかと不便だ。問題回避を逃がすコードでプログラムが無茶苦茶になったことがある(何度も)。 その必要性を解説する。 プロパティで直接値を持つと不便な理由その1:複数選択時 複数選択時に値を変更すると、複数のアイテムに「相対指定」で値を加算していくことになる。 例えばアイテムAの値が、アイテムBの値が15としよう。 Aの値が22になったらB

          値管理クラスが必要

          開発日記を立ち上げるきっかけとなった事件(後)

          俺は最新技術を導入しつつ、エレガントなビジネスロジックで書き続けた2年分のプログラムを失った。 さてどうする? もう一回作るしかないやるよ。 やりゃーいいんだろ。 やってやるよ。もう一段洗練したロジックをよ。 しかも半年で再現させてやるよクソが! Github導入まずはバックアップ環境の整備だ。 もうこれがなきゃ怖くて1行も書けん。 幸いなことに職場では長いことサブバージョンを使っていてリポジトリの概念は会得していたが、不幸なことにサーバーリポジトリを構築したことはなかっ

          開発日記を立ち上げるきっかけとなった事件(後)

          開発日記を立ち上げるきっかけとなった事件(前)

          俺の趣味はツール作りもう10年近く作り続けているツールがある。 作り続けていると言っても、あまりにも無計画で途中で設計思想を変更してアタマっから作り直したり、ライブラリを変更して作り直したり、ユーザーエクスペリエンスがイマイチでツールのコンセプトを変えたりと、完成度は高くなく、それでも徐々に洗練はされながらコツコツ作り続けてきた。 事件発生そしてこのGW。 それ以前から、「このGWで一回アルファ版をリリースしよう」と目標を定めていた。 その初日。 HDDがクラッシュした。

          開発日記を立ち上げるきっかけとなった事件(前)

          noteの使い勝手テスト

          主にプログラム開発のメモを記載していくが、開発思想やイラストの話も交えた多様な内容になるだろう。その多様なニーズに耐えられるのか? やりたいこと例まずはプログラムコードだ。 <i:Interaction.Triggers> <i:EventTrigger EventName="SelectedItemChanged"> <ri:EventToReactiveCommand Command="{Binding SelectedItemChanged}"

          noteの使い勝手テスト