2013年08月24日

久しぶりにアップデート

超久しぶりに J.S Draw をアップデートしました。おそらくJ.S Draw をいじるのもこれで最後になると思います。
元々 J.S Draw は、自分のスキルアップのために作ったもので、普段の仕事では絶対にやらないような、かなりトリッキーなコーディングをしています。そのため、数行のコーディングに1ヵ月かけたり、難解なバグに悩ませられたりといろいろ楽しませてもらいました。
作成には2年以上かかりましたが、おかげで目的は十分果たしてくれました。

ホームページで J.S Draw のソースを公開していましたが、描画を行う本体である J.S Draw ControlLibrary は dll のみの提供としていたため、数人の方からソースコードを提供してほしいと問い合わせがありました。
そこで、今回は、J.S Draw ControlLibrary のソースコードもダウンロードできるようになっています。
僭越ながら私のスパゲッティ状態のソースコードが何かのお役に立てれば嬉しく思います。

posted by j.shiozaki at 16:27| Comment(0) | TrackBack(0) | J.S Draw

2011年08月13日

ちびちびやっています。

時々暇な時間があると J.S Draw の改良を行っています。もうベースはできているのでガッツリ作りこむことは少なくなってきたのですが、気になるところをちびちびといじっています。
ということで、世間はお盆休みなのですが、自分は休みなしで来週も仕事なので帰省もせずにいつものように週末家で暇しているので、以前から気になっていたグループアイテムの回転に取り組むことにしました。
グループのアイテム回転を行うにあたり、必要のない機能を削ってロジックをシンプルにしました。本当は機能を削りたくなかったのですが、これ以上ロジックを入れ込むとスパゲティ状態になりそうなので苦肉の決断です。
とりあえず。見た目は回転できるようになったのですが道のりはまだまだ長そうです。



[グループを回転させるまでの道のり]

  1. グループ内のアイテムを回転させて描画する(50%)

  2. 回転させたグループ内のアイテムをマウスで選択できるようにする。

  3. 回転させたグループにアイテムを出し入れできるようにする。

  4. 回転させたグループ内のアイテムのアジャスターを移動してサイズを変更できるようにする。

  5. 回転させたグループのアジャスターを移動してグループアイテム内のアイテムのサイズを変更できるようにする。

  6. 回転させたグループ内のグループアイテムもきちんと動作するようにする。



この改良が終わったら J.S Draw を BSDライセンス(修正版)で公開しようかな?と思っています。
汚いコードでお恥ずかしいのですが、何かのお役に立てば幸いと思います。
posted by j.shiozaki at 19:15| Comment(0) | TrackBack(0) | J.S Draw

2011年07月24日

J.S Draw 更新

先々週から J.S Drawをいじっていたら、いろいろ気になって昨日、今日一日中ごにょごにょしていました。
見た目でわかる部分として、アイテムの属性を変更するのに今まで使いにくいプロパティグリッド形式だったのですが、もっと直観的にわかるツールバー形式にしました。
他にも、今まで見て見ぬふりをしてきたバグをいくつか修正しています。



Android アプリの開発を始めると宣言したばかりですが、なぜか .NET アプリをいじっています...
ま〜仕事ではないので、好きなことをやっているだけですが、お盆休み(休めればの話)には Android アプリに着手したいです。
posted by j.shiozaki at 20:48| Comment(0) | TrackBack(0) | J.S Draw

2010年11月07日

タブコントロール2

先週から作り始めたタブコントロールの開発も順調に進んで J.S Draw に組み込めるまでになりました。このタブバージョンの J.S Draw は 0.9.4 としてリリースする予定です。タブコントロール単体としても「J.S コントロールライブラリ」として個別にリリースする予定ですのでお楽しみに。

●タブをドラッグして好きな位置に移動できます。


●横に分割


●縦に分割

posted by j.shiozaki at 19:25| Comment(0) | TrackBack(0) | J.S Draw

2010年10月31日

タブコントロール

先週 J.S Draw 0.9.3 をリリースしましたが、いまだにβ版です。
そこで、そろそろ正式版に着手することにしました。

しかし、Visual Studio の標準のコントロールだけではいまいち操作性に欠けるのでいくつか自作することにしました。
その第1段はタブコントロールです。



見た目は普通ですが、ドッキング機能を実装して使いやすくする計画です。
ブラウザとかで何気に使っているタブコントロールですが、実際に作ると結構大変そうです。
posted by j.shiozaki at 20:48| Comment(0) | TrackBack(0) | J.S Draw

2010年10月11日

大きく印刷しよう!

今日は3連休最後の日ですが、なんとか印刷機能の実装が完了しました。3日間で作業を終わらせたかったのでいくつか省略した機能があるのですが、それらはおいおい作りこんで行きます。
今回の印刷機能の売りは、複数枚に印刷したものを貼り付けて大きくできることです。



この機能を使って A4 プリンタでも大きな印刷ができます。詳細についてはホームページを見てください⇒ 大きく印刷
次の課題はヘッダーフッターの追加です。J.S Draw はまだまだ面白くなりますので期していてください。
posted by j.shiozaki at 22:05| Comment(0) | TrackBack(0) | J.S Draw

2010年10月10日

印刷処理実装中

ただいま J.S Draw に印刷処理を実装中です。

ただ印刷するだけなら簡単にできるのに、いつもの悪いクセでまたいろいろやりたくなってしまいました。
今やろうとしている事は、エクセルみたに縦横にページを増やせるような機能です。下のイメージはページ設定画面です。



これで一体何ができるかというと、複数ページにまたがるような文字や図形を書いてそれを印刷してつないで垂れ幕や横断幕を作れます。
運動会シーズンには間に合いそうにないですが、これからもいろいろイベントがあるので意外と使えるかもです。
posted by j.shiozaki at 20:08| Comment(0) | TrackBack(0) | J.S Draw

2010年09月26日

ペンタブレット対応

J.S Draw の開発を再開して1ヵ月ほどが経ちましたが、その第1段としてペンタブレット対応版を本日リリースしました。




きちんと消しゴムも機能します。ペイント系のツールと違って J.S Draw ではペンで描画した内容をすべてベクトルデータとして保持しているため消しゴムで消した個所はキチンと演算して描画だけでなくデータ自体も消去しています。
そのため消しゴムで消しても無駄なデータが蓄積しません。これは以前仕事で開発したペンタブコントロールの応用なのですが、J.S Draw はあの頃とは比べ物にならないぐらい進化しています。
今回からソースコードを公開していますので興味のある方はダウンロードしてみてください。

ダウンロード ⇒ J.S Draw
posted by j.shiozaki at 17:35| Comment(0) | TrackBack(0) | J.S Draw

2010年05月01日

本日のバグ

先日から J.S Draw のデバッグ作業を行っています。今日はグループ化したアイテムのサイズ変更のバグを修正しました。
下のイメージのようにグループアイテムのサイズを変更すると、グループ内のアイテムの位置がずれてしまいます。このロジックは完成していた物と思っていましたが、細かくチェックしていくと漏れがありました。本格的にテストをしていくとこのようなバグが結構でできそうです。



あと、ReDo UnDo 処理系のバグが多くて困っています。ReDo UnDo は J.S Draw の制御系のロジックに直結しているので処理が複雑でデバッグが大変です。
安定動作するまではもうしばらく手間がかかりそうです。
posted by j.shiozaki at 21:22| Comment(0) | TrackBack(0) | J.S Draw

2010年04月29日

J.S Draw シリーズ 第1弾

本日からゴールデンウィーク突入です。この連休は予定を組まずに J.S Draw を完成させることに専念します。
まず第1弾として J.S パズルを完成させました。その次は J.S Draw を完成させます。J.S Draw が完成すれば、J.S パズル用のファイルを作成することができます。



J.S Draw も 90% はできているので、デバッグも含めて残り 10% を作っていきます。1週間ではギリギリですがでできる限り頑張ります。
posted by j.shiozaki at 20:31| Comment(0) | TrackBack(0) | J.S Draw

2010年03月04日

J.S Draw の課題

日頃から、J.S Draw のアイデアが思い浮かんだ時は、すぐに携帯にメモをとるようにしているのですが、本日、そのメモをまとめていたところいろいろと未実装の機能があったので紹介します。

1.ズームをスムーズにする
2.テキスト編集の縦書対応
3.パネルにイメージを追加する(※)
4.アイテムにアジャスター移動イベントを追加する
5.ボタン、チェック、等のコントロールアイテムの作成
6.テーブルアイテムの作成
7.アイテム選択イベントの追加(※)
8.コンテキストメニューにグループ化を追加する(※)

※が付いているものは第1弾で実装しようと思っています。
他の機能は難易度が高いので、後々少しずつ実装していきたいと思っております。

未実装の機能のなかで、特に重要視しているのが、「1.ズームをスムーズにする」です。
現在、画面の描画はスレッドを用いて操作がカクカクしないように対策をしているのですが、ズームのレスポンスが鈍くて、操作に対してワンテンポ遅れてついて来るような感じがします。
そこで、バックスレッドでイメージを作成している間は、現在表示しているイメージを拡大、縮小してプレビューを表示するようにしたいのと思っております。
参考にしたのは Adobe Reader です。これが実現すればかなりいい感じになるのではと期待しています。

本日は、あと、前回紹介した都道府県パズルのアイコンを作成しました。



アプリの名称は「J.S Puzzle」にする予定です。まず始めに都道府県パズルを作って、今後の展開として、自分の好きなイメージファイルからジグソーパズルを作成できるソフトにしていきたいと思っています。
パズルのピースが所定の位置はまったらそのピースにイメージが浮き出るようにして全ピースがはまるまでどんなイメージが分からないようにしようかなと思っています。

完成はいつになるかは分かりませんが、いろいろとやりたい事があって時間が足りません。平日は仕事に影響してしまうのでほどほどにしているので、週末が待ち遠しいです。
posted by j.shiozaki at 23:49| Comment(0) | TrackBack(0) | J.S Draw

2010年03月02日

3月2日のバグ(デグレ)

本日のバグは、2月26日に修正したバグのデグレーションです。
あの時ガッツリやっちゃのでこのままうまくいくはずはないと思っていましが...
でもこれで良いのです。バグを作りこんでしまっても、こうして見つかるのですから恐れることはありません。だた、今回のバグは、画面の何もないところをダブルクリックすると発生するというなんともお粗末なバグです。ふらふら



エラーメッセージを見てもわかるように、発生箇所は MouseUP イベントです。ダブルクリックの2回目のマウスアップで Null 参照エラーが発生しています。
問題個所を if で囲って null チェックをするようにして解決しました。
現在のところ、大物バグはこれで終わりで、後はチェックリストを作ってパターンを網羅していきながら細かなバグを潰して行こうと思っています。
ただ、デバッグ作業はかなり時間がかかりそうなので、今までデバッグの完了した機能を使った「都道府県パズル」を第1弾として公開しようと思っています。



3月末にリリースできるように頑張っていますので、楽しみにしていていください。
はたしてあなたは何秒でクリアできるかな時計
posted by j.shiozaki at 22:34| Comment(0) | TrackBack(0) | J.S Draw

2010年03月01日

3月1日のバグ

本日は UnDo に関するバグです。実は、UnDo 処理を作成した時にはうまく動作していたのに、いつも間にか動作しなくなっていたとういうよくあるパターンのバグです。

バグを発生させるには、グループアイテムと四角形アイテムを1つずつ用意します。そして、四角形アイテムをグループアイテムに加えます。

  

この状態で「Ctrl + Z」キーを押して UnDo 処理を行うと下のようにアイテムが分身します。ふらふら



グループにアイテムを加えるという処理は3つのコマンドからできていまして、

1.アイテム移動
2.アイテムの座標をグループの相対座標に変換
3.アイテムをグループアイテムに加える。

UnDo 処理を行う場合はこのステップを逆に行うのですが、[3.アイテムをグループアイテムに加える]の逆、[アイテムをグループから除く]処理を行った際に、アイテム毎に振ってあるIDがズレてしまって、以降アイテムが行方不明になってしまうという、説明の難しい状態になってしまうのです。

四角形アイテムがグループアイテムに入っている時はこうなっているのですが、

・グループアイテム⇒ID:0
 ┗四角形アイテム⇒ID:1

四角形アイテムがグループから外に出た時に四角形アイテムのIDが新しく振りなおされてしまい

・グループアイテム⇒ID:0
・四角形アイテム ⇒ID:2

こうなってしまっていました。

操作履歴情報はアイテムIDで管理されているので、IDがずれると処理が成り立たなくなってしない。あのようなバグになったしだいです。
修正は if文1行で済みましたが、前は動いていたよな???ってちょっと疑心暗鬼になってしまいました。
posted by j.shiozaki at 21:18| Comment(0) | TrackBack(0) | J.S Draw

2010年02月28日

2月28日のバグ

本日修正したバグは、グループアイテムにグループアイテムを設定した時に正しく描画されないというバグです。
まず、サイズの異なるグループアイテム2つと、四角形アイテムを1つ用意します。



次に3つを重ねて、
・グループ
 ┗グループ ← 非表示にする。
  ┗四角形
という関係になるように設定して、中間のグループアイテムを非表示にします。



この状態で、一番下のアイテムを選択して、移動すると描画がバグってしまいます。



本来なら、移動しているグループに属しているアイテムも一緒に移動しないといけないのですが、途中に非表示アイテムがあるため、描画の連携が途切れてしまったのです。
アイテムが非表示の場合は、効率を考えて描画しないロジックにしていたのですが、以降のアイテムも描画されないというバグを作りこんでしまいました。

修正は意外と簡単にできましたが、デバッグが進むにつれてバグの条件がシビアになってきました。今回のバグは中間のアイテムを非表示にしなければ何も問題は起きないので、気を抜いていたら見逃していたかも知れません。
そろそろチェックリストを書いてパターンを網羅していかないといけないと思ったしだいです。単純バグが減ってきたこれからがデバッグの本番!気合いを入れて頑張ります。
posted by j.shiozaki at 16:06| Comment(0) | TrackBack(0) | J.S Draw

2010年02月27日

2月27日のバグ

本日のバグは、グループアイテム内のアイテムがリサイズできないというバグです。
グループアイテムには、GropuItemLayout というプロパティがありまして、その値によってグループ内のアイテムの配置を制御することができます。たとえば GroupItemLayout=Center とすると、グループアイテム内のアイテムはすべて中央に配置されるといった仕組みです。
デフォルトは [Free] でグループアイテム内の好きなところに配置できるのですが、それ以外の値にするとアイテムのサイズが変更できなくなってしまいます。



原因は GropuItemLayout プロパティに関連するロジックなのですが、アイテムを移動することしか考えていなくて、リサイズを全く考慮しておりませんでした... ふらふら
リサイズした際には、基準とするアイテムのサイズが変化するので、移動の時より処理が複雑です。



なので、リサイズ中はアイテムの位置を固定にして、リサイズが完了した後に GropuItemLayout に従ってアイテムの再配置を行うようにしました。
あと、細かいバグをいくつか修正していますが、大物バグも2個発見しているので、明日もせっせとデバッグをやろうと思っています。

プログラムもだいぶ安定してきたので、もうひと踏ん張りがんばります。
posted by j.shiozaki at 22:22| Comment(0) | TrackBack(0) | J.S Draw

2月26日のバグ

今週はいろいろありまして、J.S Draw のデバッグ作業をさぼっておりました。なので、本日は夜なべをして、デバッグ作業を行っております。
で、本日発見したバグですが、説明が難しいのですが、

 1.複数のアイテムが重なっている。
 2.一番下のアイテムが選択状態になっている。

という状態で、選択アイテムをクリックすると、前面のアイテムも選択されてしまというバグです。

 

それで、どう動作させたいかといいますと、一番下のアイテムが選択されたまま、状態が変化しないようにしたいのです。

実はアイテムの選択と言う処理は、いろいろ条件のパターンがありまして、下手にいじると、とんでもないことになってしまうのです。ふらふら

マウスダウン、マウス移動、マウスアップのマウス3大イベントは、たがいに支えあいながら絶妙なバランスを保っており、3つのイベントのどれか1つがとちると、アイテムがとんでもない動作をしてしまいます。
これまで時間をかけてようやくバランス良く組み立てたロジックに手を加えるのはとても辛かったのですが、思い切ってガッツリやっちゃいました。がく〜(落胆した顔)
いつか、とんでもないデグレを発見するかも知れませんが、それはその時考えます。そんなことでビビっていたらプログラマなんかできません! 時にはおもいっきりも大切です。

今日の一言:恐れるな!バグは大胆に直せ!
プログラムテストレベルのバグでは、小手先の修正はを行わず、大胆に手を加えてしてスッキリとまとまりのあるプログラムにすることに心がけましょう。
posted by j.shiozaki at 00:52| Comment(0) | TrackBack(0) | J.S Draw

2010年02月16日

本日のバグ

J.S Draw の進捗ですが、現在は、機能の実装も一通り終わり、細かな不具合をコツコツつぶしております。今日は、グループ内に回転したアイテムが存在している時に、リサイズするとマウスカーソルとアジャスターの位置がずれるバグを修正しました。



原因は、回転の軸となるポイントがずれていたためで、グループ内のアイテムは、そのスピンポイントを補正しないといけない事を忘れていました。



ケアレスミスなのでご覧の通りすぐ直りました。
まだまだこんなこまごましたバグがたくさんあるのでこれからもコツコツデバッグしていきます。
posted by j.shiozaki at 22:02| Comment(0) | TrackBack(0) | J.S Draw

2010年02月13日

一難去ってまた一難

この2週間、ロジックの迷宮をあちこちさまよっていましが、本日ようやく抜け出すことができました。
いやはや、今回ばかりはすっかりはまりこんでしまい、コアロジックをブリブリいじってしまったので、時間をかけて作った別の部分のロジックが崩壊したり、みっともないコーディングになってしまったりと半ば、半狂乱状態でした。
でも迷宮を抜け出せた時の、何とも言えないこの感動がここち良いです。

と感動に浸っている時に、ふとプログラムを触っていると、ちょっとしたバグを発見しました。



これは一体何が起こっているかと言いますと、ラウンドアイテムには、ラウンドの半径を変更できるアジャスターがありまして、正常な場合は↓のようになるのですが、



グループアイテム内に入れるとこんな素晴らしい事になってしまうのです。
でも、ロジックの迷宮を突破した私には、大したバグではありません。なぜなら原因はすでに分かっているからです。出口が分かっているので今回は迷わずに済みそうです。

と、なんだかんだ、いろいろあって2月中のリリースはあやしくなってきました。楽しみにしている人はいないとは思いますが... 3月リリースでお願いします。興味のある方にはβ版を配布しますので声をかけてください。それではまた。
posted by j.shiozaki at 20:01| Comment(0) | TrackBack(0) | J.S Draw

2010年02月07日

ロジックの迷宮3

昨日に引き続き、アイテムのリサイズに取り組んでいます。
現在は↓のようになっています。



サイズを縮めると、内部の回転させた四角形がリサイズしなくなります。
なぜそうなるかと言いますと、内部にある回転した四角形をそのまま縮めてしまうと、ひし形になってしまい、それをむりやり四角形に戻そうとすると元の大きさに戻ってしまうためです。



そこで Microsoft さんの Word ではこの矛盾をどう処理しているかを見てみたところ、四角形の高さを変えてなんとか見れる形にしているようです。





Microsoft さんでもこの結果なので、ちょっと残念ですが、このケースでは見た目を維持することはあきらめます。
それにしても、Drawing プログラムの世界はなかなか難しいです。
今回 J.S Draw を作ってみて、しみじみ感じています。特に図形に回転を加えると途端に難易度が増します。
なんだか、頭の中で図形を回しすぎてクラクラしてきました。
posted by j.shiozaki at 11:41| Comment(0) | TrackBack(0) | J.S Draw

2010年02月06日

ロジックの迷宮2

相変わらずロジックの迷宮から抜け出せずにいます。1日いろいろ試してみて、なんとか原因個所は分かったのですが、解決方法が分かりません。



現在は↑のような悲惨な状態です。回転させたアイテムがどうやっても言うこと聞いてくれません。



原因はリサイズを行うことによって、回転軸のポイントが移動するためなのですが、プログラムの作り上、アジャスターの移動中は回転軸を移動できません。もし回転軸を移動してしまうと、いろいろめんどくさいことになってしまうのです...
たとえば、右下のアジャスターを移動する場合は、左上のアジャスターが基点になりますが、アイテムのサイズによって回転軸をずらすと、基点が定まらなくなって、ユーザーが使いずらくなってしまうのです。
でも描画ロジックとの絡みもあって、回転軸を移動しないと全体的にリサイズすることができなさそうなので、なんとか基点のずれを補正するロジックを考えださねばなりません。
まだ当分はロジックの迷宮から抜け出せそうもありません。

posted by j.shiozaki at 22:24| Comment(0) | TrackBack(0) | J.S Draw