none
グラフィックデータとSQLデータ RRS feed

  • 質問

  • 初心者です。よろしくお願いします。

    既存の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

    のようになっています。   さらに、その線形データには別テーブルにそのハッチングした所の情報があります。

    最終的にはその描画されているハッチングを選択してその情報を表示させたいと思っているのですが、、、。

    すみませんがよろしくお願いします。        

    2011年8月4日 10:18

回答

  • (4) は結局「複数のポリゴンが表示された後、画面上でマウスを使っ
    て任意の四角形の領域を設定し、その領域に入るまたは引っかかるポ
    リゴンを選択する。」ということですか?

    でも、その前に DB から表示するポリゴンとその座標データを抽出し
    表示する(即ち (1) ~ (3) を完成させる)のが先のようですね。

    (1) ~ (3) はどこまでできているのでしょうか? 何もできてない
    からゼロから始めるというのは、掲示板では無理だと思います。ある
    程度まで自力で作ってください。その上で不明点、問題点を質問して
    いただくようにしないと、話は進まないと思います。

    • 回答としてマーク taka_toshi 2011年8月8日 23:48
    2011年8月8日 12:07

すべての返信

  • 「ハッチング」とか「線形データ」というのは土木関係の専門用語では
    ないのですか? とすると、ここのフォーラムで質問の意味がわかる人
    は限られてくると思います。.NET や C# 以外の専門用語は使わないで
    説明することはできませんか?

     

    • 回答としてマーク taka_toshi 2011年8月4日 23:48
    • 回答としてマークされていない taka_toshi 2011年8月4日 23:50
    2011年8月4日 13:20
  • どうもすみません。

    >>既存のSQLデータにハッチングの線形データが複数あります。

    既存のSQLデータにハッチブラシで塗りつぶされたポリゴンデータが複数あります。

    >>その線形データには別テーブルにそのハッチングした所の情報があります。

    そのハッチブラシで塗りつぶされたポリゴンデータには、別テーブルにその関連情報があります。

    と直させていただきます。

    考えもなく普通に使ってしまったのでした。申し訳ありません。

    どうかよろしくお願いします。

    2011年8月5日 0:26
  • ポリゴンは四角形で良いのでしょうか? であれば、そのポリゴンを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/
    2011年8月5日 1:28
    モデレータ
  • 失礼な質問かもしれませんが、SQLからデーターは取ってこれるのでしょうか?
    2011年8月6日 0:59
  • はっきり断定はできませんが、十数年前にVBととmdbで同じことやってるものがあったので、たぶん可能だと思いました。

    SQLがだめならmdbでもよいです。

    trapemiyaさんありがとうございます。

    線形データ=polygonと思われたのならすみません。ポリゴンそのままの意味で多角形です。

    WPFも試行してみます。

     

    2011年8月6日 2:06
  • SQLがだめというより、まずDBを何にするか決めてそれからDATAを取ってくることをプログラムする練習をするのが先ではないでしょうか。

    taka_toshiさんがmdbでいいならもちろんmdbでもいいとおもいますが、はて今だとmdbにどうやってアクセスするのかな。昔より簡単なはずですが。

    2011年8月6日 2:28
  • ありがとうございます。おっしゃられていることは御もっともです。

    既存のSQLと書きましたが、もとはmdbなのです。

    で実現可能な方をと考えましたがだめでしょうか?

    であれば、SQLでお願いします。

    mdbのアクセスは問題なく接続できます。

    2011年8月6日 2:47
  • DBは何を使われる予定でしょうか?

    マイクロソフトのSQLServerなら、C# SQLでグーグルで検索してもたくさん引っかかりますよ。

    http://jeanne.wankuma.com/tips/csharp/sqlserver/

    とりあえずジャンヌさんのサイトが解りやすいでしょうか。

    2011年8月6日 2:53
  • ありがとうございます。DBはSQLを使う予定ではいます。

    そのサイトも見ましたがさらにいろいろ調べたいと思います。

    2011年8月6日 2:59
  • > 既存のSQLと書きましたが、もとはmdbなのです。
    > で実現可能な方をと考えましたがだめでしょうか?

    データベースを SQL Server にするか Access にするかは、データの入
    れ物をどうするかだけの話で、今回の課題の根本的なところとは関係な
    いのでは?

    今回やりたいことは、Windows アプリで、以下のようなことだと想像して
    いますが、いかがですか?

    (1) 複数のポリゴンデータを持つ DB のテーブルから座標データを抽出。

    (2) そのデータを使ってポリゴンをグラフィック表示する。

    (3) 上記 (1), (2) を表示したいポリゴンすべてについて繰り返す。

    (4) 表示された複数のポリゴンからあるポリゴンを選択する(例えばマ
    ウスでクリックする)。

    (5) 選択したポリゴンに該当するデータを別テーブルから抽出して表示
    する。

    上記の理解が正しければ、データベースの違いで影響を受けるのは (1)
    と (5) のデータの抽出のところだけで、SQL Server or Access どちら
    を使っても大差はないはずです。


    > formにハッチングを描くのはいろいろ調べて以下のようにできたのですが、、。

    とのことですので、現在の課題は上記の (4) と (5) でしょうか?

     

    2011年8月7日 2:49
  • いつもありがとうございます。引用させていただき整理して書き直します。

    (1)既存のSQLデータから、複数のポリゴンデータ(多角形でpoint-頂点の数は様々)を持つ DB のテーブルから座標データを抽出。

    (2)そのデータを使ってポリゴンをグラフィック表示する。

    (3) 上記 (1), (2) を表示したいポリゴンすべてについて繰り返す。

    (4) 表示された複数のポリゴンをマウスでドラッグし、その領域に入る、または引っかかるポリゴンを選択する。(数が多くまた重なっていたりするので。)

    (5) 選択したポリゴンに該当するデータを別テーブルから抽出して表示

    現在私の力ではformにハッチングを描く(表現する)のが精いっぱいで、そのXYの変数をどのようにDBに保存するのかを今試行しているような状況です。

    ですので現在の課題は全てです。

    丸投げのような感じですが、今回のような例のようなもの(座標とDB)がサイトにはなかなか見当たらなく、また有ってもうまくいかづ投稿したしだいです。

     




    2011年8月8日 1:15
  • 外池と申します。

    問題を切り分けて、個別にスレッドを立てるべきではないかと思います。

    • 複数のポリゴンの情報をデータベースに格納し、アクセスする方法
    • 複数のポリゴンを表示する方法
    • 領域指定によりポリゴンを選び出す方法(ヒットテストのようなもの?)

    後者二つは、もしかすると、一つにまとまる問題かもしれません。今のところ、「ポリゴン」が具体的に何を表しているものなのかご説明がないので、何とも言えませんが、「ポリゴン」の実態を表すクラスの設計の問題として、表示もヒットテストもまとめるべきかも、と思います。

    ただ、もうすこし表現を正確にして頂きたいのは、「(4) 表示された複数のポリゴンをマウスでドラッグし、その領域に入る、または引っかかるポリゴンを選択する。(数が多くまた重なっていたりするので。)」の部分です。ポリゴン同士の重なりをテストしないといけないのでしょうか? それとも、任意の領域を囲んだ上で、その中にある(境界に引っかかるものを含む)ポリゴンを選ぶ、ということでしょうか? (「複数のポリゴンをマウスでドラッグ」という表現が曖昧すぎてわかりません)


    (ホームページを再開しました)
    2011年8月8日 1:34
  • その方がよいかとも思います。

    言い訳になり済みませんが、全体を述べた方が後々”それ先に言ってよ!とかえって迷惑かけるなと思ったのです。

    (4)は後者の任意の領域を囲んだ上、、、ということです。本当に説明の仕方悪くて済みません。

    よろしくお願いします。、

     

    2011年8月8日 2:23
  • 外池です。私も勢いで「任意の領域」と書いてしまいましたが・・・、

    どれぐらいの「任意性」が要りますか? 四角形の領域でも良い? フリーハンドで領域を指定でいないとダメ?

    改めて、スレッドを立てるときには、このあたりもご希望を仰ったほうがよいでしょう。


    (ホームページを再開しました)
    2011年8月8日 2:39
  • とりあえず私ならSQLの勉強からするかな^^;
    2011年8月8日 3:15
  • 表現するのって難しいですね。

    ええ、、。マウスでドラッグするので4角形の範囲です。

    ドラッグする始点(x1,y1)及び終点(X2,Y2)はは任意の場所です。

     

     

    2011年8月8日 4:33
  • (4) は結局「複数のポリゴンが表示された後、画面上でマウスを使っ
    て任意の四角形の領域を設定し、その領域に入るまたは引っかかるポ
    リゴンを選択する。」ということですか?

    でも、その前に DB から表示するポリゴンとその座標データを抽出し
    表示する(即ち (1) ~ (3) を完成させる)のが先のようですね。

    (1) ~ (3) はどこまでできているのでしょうか? 何もできてない
    からゼロから始めるというのは、掲示板では無理だと思います。ある
    程度まで自力で作ってください。その上で不明点、問題点を質問して
    いただくようにしないと、話は進まないと思います。

    • 回答としてマーク taka_toshi 2011年8月8日 23:48
    2011年8月8日 12:07
  • SurferOnWwwさん、ありがとうございます。

    仰っている通りだと思いますので、改めて 先ず(1) ~ (3) をできる範囲でプログラムしてから

    投稿したいと思います。

    みなさんその際にはよろしくお願いします。

    ありがとうございました。

    2011年8月8日 23:58