トップ回答者
グラフィックデータとSQLデータ

質問
-
初心者です。よろしくお願いします。
既存のSQLデータにハッチングの線形データが複数あります。
このデータをformに表示させるにはどのようにしたらよいのでしょうか?
formにハッチングを描くのはいろいろ調べて以下のようにできたのですが、、。
Graphics g = pictureBox1.CreateGraphics();
Point[] ps = {new Point(0, 0), new Point(150, 50),
new Point(80, 100), new Point(100, 150)};
HatchBrush hBrush = new HatchBrush(
HatchStyle.Horizontal,Color.Red, Color.White);
e.Graphics.FillPolygon(hBrush, ps);
e.Dispose();また、上の例ではnew Point(x,y)が1つずつですが、SQLのデータでは、
線ID:1、0,0,150,50 線ID:2、150,50,80,100
線ID:3、80,100,100,150 線ID:4、100,150,0,0
のようになっています。 さらに、その線形データには別テーブルにそのハッチングした所の情報があります。
最終的にはその描画されているハッチングを選択してその情報を表示させたいと思っているのですが、、、。
すみませんがよろしくお願いします。
回答
-
(4) は結局「複数のポリゴンが表示された後、画面上でマウスを使っ
て任意の四角形の領域を設定し、その領域に入るまたは引っかかるポ
リゴンを選択する。」ということですか?でも、その前に DB から表示するポリゴンとその座標データを抽出し
表示する(即ち (1) ~ (3) を完成させる)のが先のようですね。(1) ~ (3) はどこまでできているのでしょうか? 何もできてない
からゼロから始めるというのは、掲示板では無理だと思います。ある
程度まで自力で作ってください。その上で不明点、問題点を質問して
いただくようにしないと、話は進まないと思います。- 回答としてマーク taka_toshi 2011年8月8日 23:48
すべての返信
-
「ハッチング」とか「線形データ」というのは土木関係の専門用語では
ないのですか? とすると、ここのフォーラムで質問の意味がわかる人
は限られてくると思います。.NET や C# 以外の専門用語は使わないで
説明することはできませんか?- 回答としてマーク taka_toshi 2011年8月4日 23:48
- 回答としてマークされていない taka_toshi 2011年8月4日 23:50
-
ポリゴンは四角形で良いのでしょうか? であれば、そのポリゴンをRectangle構造体のリストとして保持しておき、クリックした点をそのリスト内のRectangleを順に取り出して、Rectangle.Containsメソッドを実行すれば、どのRectangleに含まれるかを知ることができます。
(参考)
ある座標や領域がコントロールの領域内に含まれるているかを確認するには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/382ctrlcontain/ctrlcontain.htmlもしくは、WPFでの構築を検討されてみてはいかがでしょうか? 以下の例ではHatchをTextBlockで実現していますが、このTextBlockのMouseDownイベントなどで、どのTextBlockがクリックされたか判断することができます。グラフィックを扱うのであれば、一般的にWPFでの開発がより適しています。
(参考)
Creating a Hatched / Patterned Brush in WPF
http://mark-dot-net.blogspot.com/2007/06/creating-hatched-patterned-brush-in-wpf.html
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/ -
DBは何を使われる予定でしょうか?
マイクロソフトのSQLServerなら、C# SQLでグーグルで検索してもたくさん引っかかりますよ。
http://jeanne.wankuma.com/tips/csharp/sqlserver/
とりあえずジャンヌさんのサイトが解りやすいでしょうか。
-
> 既存のSQLと書きましたが、もとはmdbなのです。
> で実現可能な方をと考えましたがだめでしょうか?データベースを SQL Server にするか Access にするかは、データの入
れ物をどうするかだけの話で、今回の課題の根本的なところとは関係な
いのでは?今回やりたいことは、Windows アプリで、以下のようなことだと想像して
いますが、いかがですか?(1) 複数のポリゴンデータを持つ DB のテーブルから座標データを抽出。
(2) そのデータを使ってポリゴンをグラフィック表示する。
(3) 上記 (1), (2) を表示したいポリゴンすべてについて繰り返す。
(4) 表示された複数のポリゴンからあるポリゴンを選択する(例えばマ
ウスでクリックする)。(5) 選択したポリゴンに該当するデータを別テーブルから抽出して表示
する。上記の理解が正しければ、データベースの違いで影響を受けるのは (1)
と (5) のデータの抽出のところだけで、SQL Server or Access どちら
を使っても大差はないはずです。
> formにハッチングを描くのはいろいろ調べて以下のようにできたのですが、、。とのことですので、現在の課題は上記の (4) と (5) でしょうか?
-
いつもありがとうございます。引用させていただき整理して書き直します。
(1)既存のSQLデータから、複数のポリゴンデータ(多角形でpoint-頂点の数は様々)を持つ DB のテーブルから座標データを抽出。
(2)そのデータを使ってポリゴンをグラフィック表示する。
(3) 上記 (1), (2) を表示したいポリゴンすべてについて繰り返す。
(4) 表示された複数のポリゴンをマウスでドラッグし、その領域に入る、または引っかかるポリゴンを選択する。(数が多くまた重なっていたりするので。)
(5) 選択したポリゴンに該当するデータを別テーブルから抽出して表示
現在私の力ではformにハッチングを描く(表現する)のが精いっぱいで、そのXYの変数をどのようにDBに保存するのかを今試行しているような状況です。
ですので現在の課題は全てです。
丸投げのような感じですが、今回のような例のようなもの(座標とDB)がサイトにはなかなか見当たらなく、また有ってもうまくいかづ投稿したしだいです。
-
外池と申します。
問題を切り分けて、個別にスレッドを立てるべきではないかと思います。
- 複数のポリゴンの情報をデータベースに格納し、アクセスする方法
- 複数のポリゴンを表示する方法
- 領域指定によりポリゴンを選び出す方法(ヒットテストのようなもの?)
後者二つは、もしかすると、一つにまとまる問題かもしれません。今のところ、「ポリゴン」が具体的に何を表しているものなのかご説明がないので、何とも言えませんが、「ポリゴン」の実態を表すクラスの設計の問題として、表示もヒットテストもまとめるべきかも、と思います。
ただ、もうすこし表現を正確にして頂きたいのは、「(4) 表示された複数のポリゴンをマウスでドラッグし、その領域に入る、または引っかかるポリゴンを選択する。(数が多くまた重なっていたりするので。)」の部分です。ポリゴン同士の重なりをテストしないといけないのでしょうか? それとも、任意の領域を囲んだ上で、その中にある(境界に引っかかるものを含む)ポリゴンを選ぶ、ということでしょうか? (「複数のポリゴンをマウスでドラッグ」という表現が曖昧すぎてわかりません)
(ホームページを再開しました) -
(4) は結局「複数のポリゴンが表示された後、画面上でマウスを使っ
て任意の四角形の領域を設定し、その領域に入るまたは引っかかるポ
リゴンを選択する。」ということですか?でも、その前に DB から表示するポリゴンとその座標データを抽出し
表示する(即ち (1) ~ (3) を完成させる)のが先のようですね。(1) ~ (3) はどこまでできているのでしょうか? 何もできてない
からゼロから始めるというのは、掲示板では無理だと思います。ある
程度まで自力で作ってください。その上で不明点、問題点を質問して
いただくようにしないと、話は進まないと思います。- 回答としてマーク taka_toshi 2011年8月8日 23:48