Re
Quelques info supplémentaires:
Dim plist As PointList = New PointList
Il n'est pas nécessaire, dans ce cas, de mettre le "= New PointList" car tout ce dont tu a besoin c'est d'un pointeur (plist) qui pointe sur une liste de points, et il n'est pas nécessaire de la créer car elle sera créée par le fonction "PointListUtils.CreatePointlistFromPolyline(), qui renvoi un pointeur (une adresse mémoire) dans plist.
le "= New PointList" réserve de la place en mémoire pour une liste de points, et renvoie l'adresse mémoire (un pointeur) du 1ier élément de la zone mémoire qui a été réservée par le "= New PointList" dans le variable plist.
Ce ne serait donc nécessaire que si tu voulais créer toi même une liste de points et y ajouter des données, mais ici c'est la fonction CreatePointlistFromPolyline() qui crée la liste et la remplis, puis passe l'adresse mémoire à la variable plist.
l'erreur
"Ligne = 14 - Le nom 'plist' n'est pas déclaré." est dut au fait que tu déclare ta variable plist dans ta boucle for/each ; sa "portée" (sa validité) est limité à la boucle ; dès que tu sort de la boucle la variable n'est plus connue du programme et lorsque tu tente de l'utiliser ligne 14, le programme ne la connais plus.
si une variable est déclarée dans une boucle, elle n'est valable que dans la boucle ; si elle est déclarée dans une sub ou une fonction, elle n'est valable que dans la sub ou la fonction ou elle a été déclarée, pour avoir une variable connue de toutes les fonctions/sub (globale), il faut la déclarer en dehors de la sub.
exemple d'une variable globale connue à la fois dans main() et dans affiche()
même chose si tu écris:
la variable n ne sera connue que dans la boucle for/next, et app.log(n) renverra une erreur "le nom 'n' n'est pas déclaré"
par contre, si tu écris:
n sera bien connu en dehors de la boucle for/next.
mais il y a peut être plus simple.
ce qui me pose problème et qui m'a fait arrivé a cette facon de faire, ce n'est pas la détection des points important, mais le fait de les écrire au bon endroit dans la liste de points.
Si tu n'y arrive pas, j'ai trouvé une méthode qui fonctionne "en direct" sur l'interface, il suffira de faire la même chose par programmation.
- obtenir la longueur de la polyligne (Polyline.GetPerimeter) et la diviser par le nb de points voulus pour obtenir l'espacement entre les points.
- décomposer la polyligne en ses divers arcs/ligne (Polyline.ToPrimitives) on obtiens des entity
- convertir les arcs/lignes (entity) obtenus en polylignes (Arc.ToPolyline , Line.ToPolyline )
- pour chaque polyligne, utiliser
dessiner/points/contour géométrie par pas avec la valeur d'espacement obtenue au début. (CreatePointlistFromPolylineStep ())
cela te crée des points à intervalle régulier, mais surtout, chaque segment à un point à son début, et comme le début d'un segment c'est la fin du précédant, tu a tout tes points "important" correspondant aux points internes de la polyligne. cas particulier, si la polyligne est ouverte, il faudra ajouter le dernier point ; si elle est fermée, le dernier est aussi le premier donc il y est déjà.
tu te retrouve donc avec une série de listes de points qu'il suffit de joindre pour obtenir les points dans le bon ordre.
il y a une fonction JoinPointlist dans le pointlistutil, mais les listes de points doivent avoir été ajoutées au document, mais tu peux aussi le faire avec une méthode pointlist.add() en remplissant une liste vierge avec les valeurs contenues dans les pointlist obtenues avec CreatePointlistFromPolylineStep()
++
David