API PolyBezier

Résolu
nikko_s Messages postés 14 Date d'inscription samedi 12 août 2006 Statut Membre Dernière intervention 27 mai 2008 - 22 avril 2008 à 14:15
nikko_s Messages postés 14 Date d'inscription samedi 12 août 2006 Statut Membre Dernière intervention 27 mai 2008 - 23 avril 2008 à 10:16
Bonjours tous le monde,

Je souhaite effectuer un lissage de courbe avec l'API polyBezier mais je ne trouve pas d'exemple satisfaisant de l'utilisation de cette API en vb6.
Je souhaiterai procéder ainsi :

Mes points (ceux de mon graphique MSChart) sont stockés dans un tableau et  je voudrais faire un lissage de ces points via cette API et reconstruire la courbe avec Mschart ensuite.

J'aimerai avoir un exemple d'utilisation de cette api :

BOOL PolyBezier
(
  HDC          <tt class="param">hdc</tt>,
  const POINT* <tt class="param">lppt</tt>,
  DWORD        <tt class="param">cPoints</tt>
)

hDc , [In], Handle to device context. trouve, ----
<tt class="param">lppt</tt>, [In], Pointer to endpoints and control points., ----
<tt class="param">cPoints</tt>
, [In], Count of endpoints and control points.

De plus j'ai trouver un exemple qui reconstruit la courbe lissée dans une picturebox grâce à Picture1.hdc (PolyBezier(Picture1.hdc,...)
Que dois-je utiliser comme paramètre avec ma MSChart à la place de .hdc ?

Merci

5 réponses

lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
22 avril 2008 à 14:56
Bonjour,


Tu peux récupérer le hdc de ta mschart en utilisant l'API suivante :


Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long

GetDC (MSChart1.hwnd)


Il te suffit donc ensuite de mettre PolyBezier(Getdc(MsChart1.hwnd),... au lieu de picture1.hdc et cela devrait fonctionner

L'expérience, c'est une connerie par jour, mais jamais la même..
3
nikko_s Messages postés 14 Date d'inscription samedi 12 août 2006 Statut Membre Dernière intervention 27 mai 2008
22 avril 2008 à 15:40
OK merci je récupère bien mon hdc avec cette fonction

Par contre toujours pas réussi à faire fonctionner l'api dans mon code...
Personne aurai un exemple concret pour cette api avec un control MSChart ?

Merci
3
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
22 avril 2008 à 17:13
Re,


Tu trouveras quelques trucs (explication + 1 soucre) ici


Private Type POINTAPI

        X As Long

        Y As Long

End Type


Dim Bez(3) As POINTAPI

Dim i As Integer


Private Declare Function PolyBezier Lib "gdi32" (ByVal hdc As Long, lppt As POINTAPI, ByVal cPoints As Long) As Long

Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long


Private Sub Command1_Click()


Bez(0).X = 0 

Bez(0).Y = 5

Bez(1).X = 2

Bez(1).Y = 3

Bez(2).X = 50

Bez(2).Y = 200

Bez(3).X = 300

Bez(3).Y = 140


Call PolyBezier(GetDC(MSChart1.hwnd), Bez(0), 4)


Ca a l'air de fonctionner, il faut juste que tu récupères tes valeurs
dans ton tableau, et faire en sorte que l'échelle du mschart se
redimensionne...

L'expérience, c'est une connerie par jour, mais jamais la même..
3
nikko_s Messages postés 14 Date d'inscription samedi 12 août 2006 Statut Membre Dernière intervention 27 mai 2008
22 avril 2008 à 17:26
Ok je vais essayer ça tout de suite ! Par contre je tiendrai au courant que demain  car la je quitte mon lieu de stage et après plus de net, car pas internet chez moi en ce moment...

MERCI en attendant!

@ + bonne soirée
3

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

Posez votre question
nikko_s Messages postés 14 Date d'inscription samedi 12 août 2006 Statut Membre Dernière intervention 27 mai 2008
23 avril 2008 à 10:16
Bonjour,

Alors, j'ai essayé ton exemple et ça a fonctionné tout de suite. Effectivement j'utilisais l'api quasiment comme ton exemple dans mon code sauf que j'utilisais une boucle pour remplir Bez.X et Bez.Y. J'avais une erreur dans cette boucle et mes tableaux étaient mal dimensionnés.
Cette soultion fonctionne.

Merci bonne journée

@+
3
Rejoignez-nous