DOBON.NET DOBON.NETプログラミング掲示板過去ログ

線の描写

  • 題名: 線の描写
  • 著者: きっちょ
  • 日時: 2004/07/21 14:23:55
  • ID: 4979
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[Win2000]
分類:[.NET]

はじめまして。きっちょと申します。
表記の事を応用して折れ線グラフを書こうと思っています。
VB6で開発していたのですが、急遽VB.NETで開発変更となってしまいました。
VB6では
PIC1.Scale(0,100)-(100,0)
PIC1.Line(0,0)-(100,100),vbBlack
のようにピクチャーボックスにゴリゴリ線を書いていましたが、

VB.NETでは線は書けたのですがScaleをどのように設定していいのかわからず、
皆様に教えを願う次第であります。
宜しくお願い致します。
きっちょさん、こんにちは。

> はじめまして。きっちょと申します。
> 表記の事を応用して折れ線グラフを書こうと思っています。
> VB6で開発していたのですが、急遽VB.NETで開発変更となってしまいました。
> VB6では
> PIC1.Scale(0,100)-(100,0)
> PIC1.Line(0,0)-(100,100),vbBlack
> のようにピクチャーボックスにゴリゴリ線を書いていましたが、
>
> VB.NETでは線は書けたのですがScaleをどのように設定していいのかわからず、
> 皆様に教えを願う次第であります。
> 宜しくお願い致します。

こんな感じです。
Dim myGraphics As Graphics = Me.CreateGraphics
Dim myPen As New Pen(Color.Blue, 2)
myGraphics.DrawLine(myPen, 0, 0, 100, 100)
■No4984に返信(ぺがらぼさんの記事)
> きっちょさん、こんにちは。
>
>>はじめまして。きっちょと申します。
>>表記の事を応用して折れ線グラフを書こうと思っています。
>>VB6で開発していたのですが、急遽VB.NETで開発変更となってしまいました。
>>VB6では
>> PIC1.Scale(0,100)-(100,0)
>> PIC1.Line(0,0)-(100,100),vbBlack
>>のようにピクチャーボックスにゴリゴリ線を書いていましたが、
>>
>>VB.NETでは線は書けたのですがScaleをどのように設定していいのかわからず、
>>皆様に教えを願う次第であります。
>>宜しくお願い致します。
>
> こんな感じです。
> Dim myGraphics As Graphics = Me.CreateGraphics
> Dim myPen As New Pen(Color.Blue, 2)
> myGraphics.DrawLine(myPen, 0, 0, 100, 100)

ぺがらぼ 様 ありがとうございます。
はい、これで線は書けました。が、これでは右下がりの線になってしまいます。
線描写部分(ピクチャーボックス)の左上を座標(0,100)右下を座標(100,0)
にしたいのですが…。(座標は可変にしたいので…。)
PIC1.Scale(0,100)-(100,0)にかわる記述ってないのでしょうか?

説明不足で申し訳ありません。
■No4992に返信(きっちょさんの記事)

 きっちょさん、こんばんは。深山と申します。

> 線描写部分(ピクチャーボックス)の左上を座標(0,100)右下を座標(100,0)
> にしたいのですが…。(座標は可変にしたいので…。)
> PIC1.Scale(0,100)-(100,0)にかわる記述ってないのでしょうか?

 少し調べてみましたが、 .NET では直接 VB6 のときの Scale に相当するものはなさそうでした。
# あんまり熱心には探してないのでどこかにあるかも知れませんけど(^_^;)

 無理矢理
> >>  PIC1.Scale(0,100)-(100,0)
> >>  PIC1.Line(0,0)-(100,100),vbBlack
に相当するものを書くとしたら次のようになるかと思うのですが‥‥
# Imports System.Drawing.Drawing2D が必要です。

    Dim m As New Matrix(1, 0, 0, -1, 0, 0)
    Dim g As Graphics = PictureBox1.CreateGraphics

    m.Scale(CSng(PictureBox1.ClientRectangle.Width / 100), CSng(PictureBox1.ClientRectangle.Height / 100))
    g.Transform = m
    g.TranslateTransform(0, PictureBox1.ClientRectangle.Height, MatrixOrder.Append)
    g.DrawLine(Pens.Black, 0, 0, 100, 100)

‥‥これだとスケールが変更される関係で、直線の太さまで変わってしまいます。
 座標系の変更だけに留め、全体を 100 とするのは諦め(必要であるなら座標は計算によって求め)
た方が良さそうです。

 こちらのサイトにある次の Tips などを参考に、色々試してみて下さいませ。

ワールド変換により画像を平行移動、拡大、縮小、回転して表示する
http://dobon.net/vb/dotnet/graphics/transform.html
きっちょさん、こんにちは。

> ぺがらぼ 様 ありがとうございます。
> はい、これで線は書けました。が、これでは右下がりの線になってしまいます。
> 線描写部分(ピクチャーボックス)の左上を座標(0,100)右下を座標(100,0)
> にしたいのですが…。(座標は可変にしたいので…。)
> PIC1.Scale(0,100)-(100,0)にかわる記述ってないのでしょうか?
>
> 説明不足で申し訳ありません。

・・・(-_-;)
こう書けば解って貰えますか?
Dim myGraphics As Graphics = Me.CreateGraphics
Dim myPen As New Pen(Color.Blue, 1)
Dim x As Point = New Point(0, 100)
Dim y As Point = New Point(100, 0)
myGraphics.DrawLine(myPen, x, y)

あとは、「Matrix」、「Matrix.Scale」、
四角なら「DrawRectangle」を調べて・・・ごにょごにょ(ToT)/~~~
いろいろとありがとうございました。
座標は計算によって求めるようにします。

いろいろ調べて見ましたがコントロールの左上が原点(0,0)が原則なんですね…。
きっちょさん、こんばんは。

> いろいろとありがとうございました。
> 座標は計算によって求めるようにします。
>
> いろいろ調べて見ましたがコントロールの左上が原点(0,0)が原則なんですね…。

複雑に見えますが、慣れるとVB6よりも簡単ですよ。
頑張ってください。
■No5004に返信(ぺがらぼさんの記事)
> きっちょさん、こんばんは。
>
>>いろいろとありがとうございました。
>>座標は計算によって求めるようにします。
>>
>>いろいろ調べて見ましたがコントロールの左上が原点(0,0)が原則なんですね…。
>
> 複雑に見えますが、慣れるとVB6よりも簡単ですよ。
> 頑張ってください。

昨日今日と.NETをさわり出したぐらいの超初心者なので…。
いつかは「VB6よりも簡単」と思えるようがんばります。ありがとうございました。
解決済み!
  • 題名: Re[7]: 線の描写
  • 著者: きっちょ
  • 日時: 2004/07/22 11:19:41
  • ID: 5027
  • この記事の返信元:
  • この記事への返信:
  • ツリーを表示
■No5006に返信(きっちょさんの記事)
> ■No5004に返信(ぺがらぼさんの記事)
>>きっちょさん、こんばんは。
>>
> >>いろいろとありがとうございました。
> >>座標は計算によって求めるようにします。
> >>
> >>いろいろ調べて見ましたがコントロールの左上が原点(0,0)が原則なんですね…。
>>
訂正
原点はどこのでもできるが、原点より下方向が+Y 上方向が-Y が原則なんですね…。
■No5027に返信(きっちょさんの記事)

>>>>いろいろ調べて見ましたがコントロールの左上が原点(0,0)が原則なんですね…。
> >>
> 訂正
> 原点はどこのでもできるが、原点より下方向が+Y 上方向が-Y が原則なんですね…。

 ?
 『原則』という言い方をするなら左上が原点というのは正しいのではないかと。
 というか上方向を +Y 、下方向を -Y に変更することも出来ますし。
きっちょさん、こんにちは。

myGraphics.DrawLine(myPen, x, y) の表現がおかしかったかな…
これで示す、[x]は第一ポイント、[y]は第二ポイントです。
Dim x As Point = New Point(0, 100) の[0]が第一ポイントのX座標、[100]が第一ポイントのY座標を表します。
勘違いさせるような表現をしてしまい、申し訳ないっす。
詳しくは、DrawLineをキーワードにしてヘルプを見てください。
  • 題名: Re[9]: 線の描写
  • 著者: きっちょ
  • 日時: 2004/07/22 12:53:18
  • ID: 5035
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No5030に返信(深山さんの記事)
> ■No5027に返信(きっちょさんの記事)
>
> >>>>いろいろ調べて見ましたがコントロールの左上が原点(0,0)が原則なんですね…。
>>>>
>>訂正
>>原点はどこのでもできるが、原点より下方向が+Y 上方向が-Y が原則なんですね…。
>
>  ?
>  『原則』という言い方をするなら左上が原点というのは正しいのではないかと。
>  というか上方向を +Y 、下方向を -Y に変更することも出来ますし。

え?本当ですか?
PIC1.TranslateTransform(StartingX, StartingY)
    こんな感じで原点移動して、
    実際に線を書くときにはY軸は*-1する感じでグラフ書いたんですけど…。

「上方向を +Y 、下方向を -Y に変更することも出来ますし」
具体的にどうコーディングするのでしょうか?  
宜しくお願い致します。 
■No5035に返信(きっちょさんの記事)
> 「上方向を +Y 、下方向を -Y に変更することも出来ますし」
> 具体的にどうコーディングするのでしょうか?  

 ‥‥ということは、 No4993 に掲載したコードは試してなくて、
ぺがらぼさんのアドバイスにあったように Matrix を調べることもされてない、
ということなのですね‥‥。

 先のコードは次のような処理内容でした。

・描画領域全体が 100 * 100 となるようにスケーリングする
・Y 軸の座標系を反転させる
・原点の位置を左下に移動させる
・(0, 0) - (100, 100) に直線を描画する
■No5036に返信(深山さんの記事)
> ■No5035に返信(きっちょさんの記事)
>>「上方向を +Y 、下方向を -Y に変更することも出来ますし」
>>具体的にどうコーディングするのでしょうか?  
>
>  ‥‥ということは、 No4993 に掲載したコードは試してなくて、
> ぺがらぼさんのアドバイスにあったように Matrix を調べることもされてない、
> ということなのですね‥‥。
>
>  先のコードは次のような処理内容でした。
>
> ・描画領域全体が 100 * 100 となるようにスケーリングする
> ・Y 軸の座標系を反転させる
> ・原点の位置を左下に移動させる
> ・(0, 0) - (100, 100) に直線を描画する

いろいろ調べてますが、ぜんぜん進展なしです…。
「# Imports System.Drawing.Drawing2D が必要です。」の意味がわからない…。

[C#]
//using System.Drawing.Drawing2D;
//が宣言されているものとする   …?どう宣言する?   
きっちょさん、こんばんは〜!

> いろいろ調べてますが、ぜんぜん進展なしです…。
> 「# Imports System.Drawing.Drawing2D が必要です。」の意味がわからない…。
>
> [C#]
> //using System.Drawing.Drawing2D;
> //が宣言されているものとする   …?どう宣言する?   

Imports System.Drawing.Drawing2D を
ソースの一番上につけろ!ゴラァ!という意味です。
[Imports] or [using]を調べるベシ
  • 題名: Re[13]: 線の描写
  • 著者: きっちょ
  • 日時: 2004/07/22 21:00:27
  • ID: 5066
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No5062に返信(ぺがらぼさんの記事)
> きっちょさん、こんばんは〜!
>
>>いろいろ調べてますが、ぜんぜん進展なしです…。
>>「# Imports System.Drawing.Drawing2D が必要です。」の意味がわからない…。
>>
>>[C#]
>>//using System.Drawing.Drawing2D;
>>//が宣言されているものとする   …?どう宣言する?   
>
> Imports System.Drawing.Drawing2D を
> ソースの一番上につけろ!ゴラァ!という意味です。
> [Imports] or [using]を調べるベシ
>
あ!できた!
私Imports System.Drawing.Drawing2D を

Public Class frmMain   (私のプログラムの一番上)
  Inherits System.Windows.Forms.Form
  Imports System.Drawing.Drawing2D ←ここに書いてました・・・。

なんか似たようなものがあったので・・・。
ありがとうございましたぁ。というかご迷惑かけました・・・。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板