Vb.Net Dessiner dans un diagramme d'un contrôle chart [Résolu]

kikou93 399 Messages postés mardi 4 février 2014Date d'inscription 13 avril 2018 Dernière intervention - 6 oct. 2016 à 19:33 - Dernière réponse : kikou93 399 Messages postés mardi 4 février 2014Date d'inscription 13 avril 2018 Dernière intervention
- 7 oct. 2016 à 18:39
Bonjour,
en regardant le poste de Karin.code :
http://codes-sources.commentcamarche.net/forum/affich-10069404-vb-net-supprimer-plusieurs-lineshape#top
j'ai eu l'envie d'améliorer l'un de mes logiciel de travail
ce logiciel me permet de dessiner un diagramme des moments en utilisant le contrôle chart
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
With Me.Chart1.Series("Series1").Points
.AddXY(2, 0)
.AddXY(2, -500)
End With
With Me.Chart1.Series("Series1").Points
.AddXY(2, 0)
.AddXY(18, 0)
End With
With Me.Chart1.Series("Series5").Points
.AddXY(2, -500)
.AddXY(4, 200)
.AddXY(6, -400)
End With
With Me.Chart1.Series("Series2").Points
.AddXY(6, -400)
.AddXY(8, 150)
.AddXY(10, -550)
End With
With Me.Chart1.Series("Series3").Points
.AddXY(10, -550)
.AddXY(12, 100)
.AddXY(14, -300)
End With
With Me.Chart1.Series("Series4").Points
.AddXY(14, -300)
.AddXY(16, 50)
.AddXY(18, -550)
End With
With Me.Chart1.Series("Series6").Points
.AddXY(18, 0)
.AddXY(18, -550)
End With
With Me.Chart1
.ChartAreas(0).AxisY.IsReversed = True
'Pour masquer les étiquettes de l'axe X
.ChartAreas(0).AxisX.LabelStyle.Enabled = False
'Pour masquer les étiquettes de l'axe Y
.ChartAreas(0).AxisY.LabelStyle.Enabled = False
'Pour masquer les quadrillages dans le sens X
.ChartAreas(0).AxisX.MajorGrid.Enabled = False

'Pour masquer les quadrillages dans le sens Y
.ChartAreas(0).AxisY.MajorGrid.Enabled = False
'Pour masquer les graduations dans le sens X
.ChartAreas(0).AxisX.MajorTickMark.Enabled = False
'Pour masquer les graduations dans le sens Y
.ChartAreas(0).AxisY.MajorTickMark.Enabled = False
'Pour masquer l'axe X
.ChartAreas(0).AxisY.Crossing = 0
.ChartAreas(0).AxisX.IsMarksNextToAxis = False
.ChartAreas(0).AxisX.LineWidth = 0
'Pour masquer l'axe Y
.ChartAreas(0).AxisY.LineWidth = 0
'pour maquer la légend
.Legends(0).Enabled = False
'Pour donner une épaisseur de 2 pts pour le graphe
.Series("Series1").BorderWidth = 1
.Series("Series2").BorderWidth = 2
.Series("Series3").BorderWidth = 2
.Series("Series4").BorderWidth = 2
.Series("Series5").BorderWidth = 2
.Series("Series6").BorderWidth = 1
.Series("Series0").BorderWidth = 1
'Redimensionner le graphe
'Pour donner au graphe une couleur noir
.Series("Series1").Color = Color.Black
.Series("Series2").Color = Color.Black
.Series("Series3").Color = Color.Black
.Series("Series4").Color = Color.Black
.Series("Series5").Color = Color.Black
.Series("Series6").Color = Color.Black
.Series("Series0").Color = Color.Black
End With
End Sub


je voulais dessiner se qu'on appel un appuis double dans graphe
j'ai créé le code suivant
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim g As Graphics
g = Chart1.CreateGraphics
X = 40
Y = 50
' Triangle
Dim blackPen As New Pen(Color.Black, 1)
Dim pointA1 As New Point(X, Y)
Dim pointA2 As New Point(X - 20, Y + 25)
Dim pointA3 As New Point(X + 20, Y + 25)
Dim pointA4 As New Point(X, Y)
Dim curvePoints1 As Point() = {pointA1, pointA2, pointA3, pointA4}
g.DrawPolygon(blackPen, curvePoints1)
' Ligne
Dim pointB1 As New Point(X - 30, Y + 25)
Dim pointB2 As New Point(X + 30, Y + 25)
Dim curvePoints2 As Point() = {pointB1, pointB2}
g.DrawPolygon(blackPen, curvePoints2)
' Cercle
g.DrawArc(Pens.Blue, X - 25, Y + 25, 10, 10, 300, 360)
g.DrawArc(Pens.Blue, X + 15, Y + 25, 10, 10, 300, 360)
' Ligne
Dim pointC1 As New Point(X - 30, Y + 35)
Dim pointC2 As New Point(X + 30, Y + 35)
Dim curvePoints3 As Point() = {pointC1, pointC2}
g.DrawPolygon(blackPen, curvePoints3)
End Sub



mais le problème et que je veux qu'il soit dessiner au point 0,0 de l'axe X,Y (au début du Diagramme)



alors ma question est la suivante
comme je peux récupérer la localisation du point X,Y non par rapport à l'axe X,Y mais par rapport au chart
je ne peux pas donner une localisation approximative car la position de l'axe X change par rapport aux point du diagramme
je ne c'est pas si j'ai bien expliquer
Merci d'avance

Afficher la suite 

12 réponses

Répondre au sujet
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 7 oct. 2016 à 16:31
+1
Utile
1
J'ai enfin trouvé!

  Dim g As Graphics
        Dim x As Integer
        Dim y As Integer
        g = Chart1.CreateGraphics
        y = CInt((Chart1.ChartAreas(0).AxisY.ValueToPixelPosition(y)))
        y = y - 30 'hauteur du triangle
        x = CInt((Chart1.ChartAreas(0).AxisX.ValueToPixelPosition(x)))


Voilà
Cette réponse vous a-t-elle aidé ?  
kikou93 399 Messages postés mardi 4 février 2014Date d'inscription 13 avril 2018 Dernière intervention - 7 oct. 2016 à 18:39
Ça marche très bien
1000 Merci cs_Le Pivert pour ton aide
Commenter la réponse de cs_Le Pivert
Whismeril 11407 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 20 avril 2018 Dernière intervention - 6 oct. 2016 à 20:13
0
Utile
Bonsoir,

Ça fait longtemps que je n'ai pas utilisé de Chart, mais il me semble que les formes sont dans la même échelle que les courbes.
Commenter la réponse de Whismeril
kikou93 399 Messages postés mardi 4 février 2014Date d'inscription 13 avril 2018 Dernière intervention - 6 oct. 2016 à 20:31
0
Utile
3
non se ne sont pas les mêmes
première mot l'axe X,Y ne commence pas a partir de X=0 dans le chart

et deuxième mot l'echelle de l'axe n'est pas le memeque celui utilisé dans le contrôle
par exemple :
ici X= 2 mais la distance entre 0 et 2 n'est pas vraiment la distance qui est utilisé pour un contrôle (elle est multiplié par un echele spécial)
je ne c'est pas si j'ai bien expliquer
kikou93 399 Messages postés mardi 4 février 2014Date d'inscription 13 avril 2018 Dernière intervention - 6 oct. 2016 à 22:15
Bonsoir Whismeril
J'ai trouvé ce lien
https://msdn.microsoft.com/fr-fr/library/dd456731.aspx
il dise que on peut convertir les coordonnées en pixel avec La classe ChartGraphics (PointF, RectangleF et SizeF)
Mais j'ai beau chercher je ne trouvé pas un article qui parle de chart et PointF en même temps

il y a aussi cette exemple
https://msdn.microsoft.com/en-us/library/dd456612.aspx
mais j'arrive vraiment pas à le comprendre
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention > kikou93 399 Messages postés mardi 4 février 2014Date d'inscription 13 avril 2018 Dernière intervention - 6 oct. 2016 à 22:45
kikou93 399 Messages postés mardi 4 février 2014Date d'inscription 13 avril 2018 Dernière intervention > cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 7 oct. 2016 à 10:04
Bonjour cs_ShayW
en lisant le lien que tu m'a donné
j'ai trouvé la fonction suivante : GetRelativePoint(PointF)
cette fonction prend les coordonnées absolues (à partir du diagramme) les coordonnées relatives (coordonnées d'un point dans le contrôle chart).
Commenter la réponse de kikou93
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - Modifié par cs_Le Pivert le 7/10/2016 à 11:27
0
Utile
Bonjour,

Le graphique Spline ne suffit pas?

http://plasserre.developpez.com/cours/chart/#LIII-C-1

@+ Le Pivert
Commenter la réponse de cs_Le Pivert
kikou93 399 Messages postés mardi 4 février 2014Date d'inscription 13 avril 2018 Dernière intervention - 7 oct. 2016 à 11:36
0
Utile
1
Bonjour cs_Le Privert
Merci pour ta réponse
J'ai déjà vue ce lien, ça m'a déjà beaucoup servi pour créer le code ci-dessus
Le graphique ligne ne suffit pas?
tu veux dire si je suis obligé de dessiner l'appuis ou non ?
si c'est ça, non je ne suis pas obligé c'est juste pour améliorer l'apparence du diagramme (Le rendre plus présentable)
le problème ce sont les coordonnées de départ de l'appuis que je veux ajouter, par exemple si je choisi :
X =0 et Y=0
ça ne dessine pas l'appuis dans le point vert mais dans le point rouge


cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - 7 oct. 2016 à 11:38
J'ai rectifié c'est:

Le graphique Spline

regarde le car ce que tu veux faire c'est réinventer la roue!
Commenter la réponse de kikou93
kikou93 399 Messages postés mardi 4 février 2014Date d'inscription 13 avril 2018 Dernière intervention - 7 oct. 2016 à 12:10
0
Utile
désolé si je n'ai pas bien compris, mais je l'utilise déjà

l'appuis que je veut dessiner n'a rien avoir avec les données qui me permet de créer le diagramme, c'est juste pour l'apparence du graphe
Commenter la réponse de kikou93
cs_Le Pivert 5065 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 13 avril 2018 Dernière intervention - Modifié par cs_Le Pivert le 7/10/2016 à 15:56
0
Utile
Effectivement, j'ai mal compris.

Essaie avec cela mais sans conviction:

 Dim g As Graphics
        Dim x As Integer
        Dim y As Integer
        g = Chart1.CreateGraphics
        y = (Chart1.Height)
        x = (Chart1.Location.X)


Le problème est que le sommet de ton triangle est y, il faudra certainement en tenir compte si tu veux que ta base soit en alignement.

@+ Le Pivert
Commenter la réponse de cs_Le Pivert

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.