VB.Net Fonction .Rectangle

cs_JeffC1977
Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
- 6 sept. 2007 à 19:29
cs_Stephane33
Messages postés
630
Date d'inscription
samedi 15 février 2003
Statut
Modérateur
Dernière intervention
9 octobre 2011
- 10 sept. 2007 à 21:02
Salut
J'utilise ce code pour dessiner un cercle dans un picture box
Dim MonRectable
As Rectangle

Le problème c'est que Rectangle donne des Integer
J'ai lu que  pour des fonctions plus avancés d'utiliser ceci

System.Drawing.Region


object

Ok mais je fais quoi avec ca ????

Meci de votre aide

10 réponses

cs_Stephane33
Messages postés
630
Date d'inscription
samedi 15 février 2003
Statut
Modérateur
Dernière intervention
9 octobre 2011
1
6 sept. 2007 à 21:19
Plutôt
Dim Monrect as new RectangleF(0,0,100,100)
g.drawcircle(MyPen,MyBrush,Monrect)

devait marché, j'ai pas VB.net là je fais de tête

Le savoir ne sert que si il est partagé par tous
0
cs_JeffC1977
Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
4
6 sept. 2007 à 22:16
j'ai essayé mais ca cause 3 erreurs et si je ne mets pas le (0,0,100,100) j'ai une seule erreur qui dit :
'System.Drawing.RectangleF' cannot be converted to  System.Drawing.Rectangle'. 

Voir ce qui est en gras et en souligné

Merci de ton aide

Private
Sub BtnCercle_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles cmdDessin.Click

Dim objBitMap
As
New Bitmap(PictureBox1.Width, PictureBox1.Height)

Dim objGraphics
As Graphics

Dim MonRectable
As RectangleF

Dim MaBrush
As Brush

Dim i
As
Integer
Dim CoordX
As
Double, CoordY
As
Double

For i = 0
To UBound(Tableau)
LigneSplit = Tableau(i).Split(Separateur)
CoordX = ((Convert.ToDouble(LigneSplit(2)) + 5000) / 1000)
CoordY = ((Convert.ToDouble(LigneSplit(1)) + 5000) / 1000)
objGraphics = Graphics.FromImage(objBitMap)
MonRectable =
New RectangleF(CoordX, CoordY.ToString, 1, 1)
MaBrush =
New SolidBrush(Color.Blue)

If i = 0
Then objGraphics.Clear(Color.White)
objGraphics.FillEllipse(MaBrush, MonRectable )

Me.PictureBox1.Image = objBitMap
objGraphics.Dispose()
objGraphics =
Nothing
Next i

End
Sub
0
cs_Stephane33
Messages postés
630
Date d'inscription
samedi 15 février 2003
Statut
Modérateur
Dernière intervention
9 octobre 2011
1
6 sept. 2007 à 22:39
Dim
MonRectable

As
Rectangle


MonRectable =

New
Rectangle(CoordX, CoordY.ToString, 1, 1)
En fait la différence entre RectangleF et Rectangle c'est la précision. RectangleF accepte la virgule Flottante et pas Rectangle.
Visiblement la fonction FillElipse n'accepte que Rectangle

pour


If
i = 0

Then
objGraphics.Clear(Color.White)

Tu instancie un nouveau bitmap donc tu n'est pas obligé de l'effacer
et place le plutôt avant


Private
Sub
BtnCercle_Click(

ByVal
sender

As
System.Object,

ByVal
e

As
System.EventArgs)

Handles
cmdDessin.Click





Dim
objBitMap

As
New
Bitmap(PictureBox1.Width, PictureBox1.Height)


Dim
objGraphics

As
Graphics


Dim
MonRectable

As
Rectangle


Dim
MaBrush

As
Brush


Dim
i

As
Integer

Dim
CoordX

As
Double
, CoordY

As
Double






objGraphics = Graphics.FromImage(objBitMap) 'Une fois cela suffit


objGraphics.Clear(Color.White) 'Cela ajoute peint le  fond en blanc


MaBrush =

New
SolidBrush(Color.Blue)


'Une fois cela suffit






For
i = 0

To
UBound(Tableau)
    LigneSplit = Tableau(i).Split(Separateur)



    LigneSplit = Tableau(i).Split(Separateur)
    CoordX = ((Convert.ToDouble(LigneSplit(2)) + 5000) / 1000)
    CoordY = ((Convert.ToDouble(LigneSplit(1)) + 5000) / 1000)
    MonRectable =

New
Rectangle(CoordX, CoordY.ToString, 1, 1)


    objGraphics.FillEllipse(MaBrush,MonRectable )


Next
i





Me
.PictureBox1.Image = objBitMap


'Une fois cela suffit




objGraphics.Dispose()


'Une fois cela suffit




objGraphics =

Nothing

'Une fois cela suffit




End Sub


Le savoir ne sert que si il est partagé par tous
0
cs_Stephane33
Messages postés
630
Date d'inscription
samedi 15 février 2003
Statut
Modérateur
Dernière intervention
9 octobre 2011
1
6 sept. 2007 à 22:40
Oups désolé doublon dans la boucle For

For i = 0
To UBound(Tableau)
    <strike>LigneSplit = Tableau(i).Split(Separateur)</strike>
<strike></strike>
    LigneSplit = Tableau(i).Split(Separateur)
    CoordX = ((Convert.ToDouble(LigneSplit(2)) + 5000) / 1000)
    CoordY = ((Convert.ToDouble(LigneSplit(1)) + 5000) / 1000)
    MonRectable =
New Rectangle(CoordX, CoordY.ToString, 1, 1)

    objGraphics.FillEllipse(MaBrush,MonRectable )

Next i

Le savoir ne sert que si il est partagé par tous
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_JeffC1977
Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
4
7 sept. 2007 à 11:38
Salut j'avais remarquer le doublons...  héhéhé

Mais j'ai encore le même problème c'est-à-dire

On dirais que le le code n'aime pas le RectangleF, mais j'en ai besoin, j'ai besoin d'avoir des décimaux pour les coordoonées

J'attends ton aide

Private
Sub BtnCercle_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles cmdDessin.Click

Dim objBitMap
As
New Bitmap(PictureBox1.Width, PictureBox1.Height)

Dim objGraphics
As Graphics

Dim MonRectable
As RectangleF

Dim MaBrush
As Brush

Dim i
As
Integer
Dim CoordX
As
Double, CoordY
As
DoubleobjGraphics = Graphics.FromImage(objBitMap)
objGraphics.Clear(Color.White)
MaBrush =

New SolidBrush(Color.Blue)

For i = 0
To UBound(Tableau)
   LigneSplit = Tableau(i).Split(Separateur)
   CoordX = ((Convert.ToDouble(LigneSplit(2)) + 5000) / 1000)
   CoordY = ((Convert.ToDouble(LigneSplit(1)) + 5000) / 1000)
   MonRectable =
New RectangleF(CoordX, CoordY.ToString, 1, 1)
   objGraphics.FillEllipse(MaBrush, MonRectable ) 'Error 2 Value of type 'System.Drawing.RectangleF' cannot be converted to 'System.Drawing.Rectangle'

Next i

Me.PictureBox1.Image = objBitMap
objGraphics.Dispose()
objGraphics =
Nothing
End
Sub
0
cs_Stephane33
Messages postés
630
Date d'inscription
samedi 15 février 2003
Statut
Modérateur
Dernière intervention
9 octobre 2011
1
8 sept. 2007 à 22:04
Au niveau précision c'est clair, mais là pour ta représentation graphique, soit tu fais du Plein avec Rectangle, soit tu fais vide avec RectangleF et DrawEllipse

Le savoir ne sert que si il est partagé par tous
0
cs_JeffC1977
Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
4
10 sept. 2007 à 13:18
ok J'ai encore un peu de difficult.é avec ces notions

Je doit absolument utiliser RectangleF. Je m'en fou d'avoir un rond plein. Bref j'ai besoin d'un élément ponctuel afin de représenté chaque coordonnées. Que me suggères-tu ???

Je peux mettre une croix enfin n'importe quoi qui va représenté chaque coordonnée par un éléments quelconque.

J'attends ton aide...

merci d'avance
0
cs_Stephane33
Messages postés
630
Date d'inscription
samedi 15 février 2003
Statut
Modérateur
Dernière intervention
9 octobre 2011
1
10 sept. 2007 à 17:58
"Je peux mettre une croix"

Une croix c'est deux lignes

Dim MonPoint as pointF
Const TailleCroix as integer = 2
Dim Crayon as New Pen(Color.Black,1)
..........
MonPoint.X
= ((Convert.ToDouble(LigneSplit(2)) + 5000) / 1000)
MonPoint.Y = ((Convert.ToDouble(LigneSplit(1)) + 5000) / 1000)

objGraphics.DrawLine(Crayon,MontPoint.X-TailleCroix,MonPoint.Y,
MontPoint.X+TailleCroix
,MonPoint.Y)

objGraphics.DrawLine(Crayon,MontPoint.X,MonPoint.Y
-TailleCroix
,
MontPoint.X
,MonPoint.Y
+TailleCroix
)

eventuellement tu le crés en fonction

Function DrawCroix(g as graphics, MontPoint as PointF)

Const TailleCroix as integer = 2
Dim Crayon as New Pen(Color.Black,1)

g.DrawLine(Crayon,MontPoint.X-TailleCroix,MonPoint.Y,
MontPoint.X+TailleCroix
,MonPoint.Y)

g.DrawLine(Crayon,MontPoint.X,MonPoint.Y
-TailleCroix
,
MontPoint.X
,MonPoint.Y
+TailleCroix
)

End Function

et dans ta boucle For/next

For i = 0
To UBound(Tableau)
   LigneSplit = Tableau(i).Split(Separateur)
Dim Point1 as new PointF(
((Convert.ToDouble(LigneSplit(2)) + 5000) / 1000),
CoordY = ((Convert.ToDouble(LigneSplit(1)) + 5000) / 1000))
DrawCroix(objGraphics,Point1)

Next i

 Le savoir ne sert que si il est partagé par tous
0
cs_JeffC1977
Messages postés
926
Date d'inscription
vendredi 10 novembre 2000
Statut
Membre
Dernière intervention
10 septembre 2010
4
10 sept. 2007 à 18:42
ok cool merci beaucoup....

Mais si tu as toujours la patience de m'aider...

Peux-tu me dire comment faire avec mon code plus haut en utilisant RectangleF en mettant utilisant un rond ???

Je suis curieux de savoir pourquoi le code que j'utilise ne fonctionne pas...

merci de ton aide...

P.S. pour le code de la croix
Dim

MonPoint
As pointFConst pointFConst n'existe pas....

Merci de ton aide
0
cs_Stephane33
Messages postés
630
Date d'inscription
samedi 15 février 2003
Statut
Modérateur
Dernière intervention
9 octobre 2011
1
10 sept. 2007 à 21:02
"En fait la différence entre RectangleF et Rectangle
c'est la précision. RectangleF accepte la virgule Flottante et pas
Rectangle.
Visiblement la fonction FillElipse n'accepte que Rectangle"



Dim



MonPoint

As
pointFConst pointFConst n'existe pas....

Manque des retours chariots



Dim MonPoint
As pointF




Le savoir ne sert que si il est partagé par tous
0