Je cherche un moyen d'extraire l'ensemble des points d'une esquisse 3D dans l'ordre suivi lors de la fonction balayage. Ceci dans le but d'effectuer des calculs tels que: métrés, perte de charge, rdm filaire ...
J'ai essayé les 4 fonctions suivantes:
swSketch.GetSketchSegments: donne les segments dans le désordre swSketch.GetSketchPoints2: donne les points dans le désordre--> je joins un exemple. J'ai essayé swSkPt.GetID(0) et swSkPt.GetID(1) mais cela ne donne pas l'ordre. swSketch.GetSketchPaths: donne rien dans mon cas swSketch.GetLines: donne les points dans l'ordre, mais ne traite qu'environ la moitié de l'esquisse --> vraiment dommage, j'y étais presque !!
pour chacune j'ai procédé à une boucle du type:
For i = LBound(vSketchPt) To UBound(vSketchPt) Set swSkPt = vSketchPt(i) Debug.Print (swSkPt.X & ";" & swSkPt.Y & ";" & swSkPt.Z) Next
Je serais intéressé si vous auriez des conseils à m'apporter sur cette problématique.
Quant à l'ordre des points, d'instinct et de ce que j'interprète du résultat obtenu sur ton image, je dirais qu'il n'est défini que par l'ordre de création. Qu'un congé d'esquisse ajouté après avoir tracé les lignes 1-2 2-3 3-4 sera numéroté 5-6 avec le point de centre d'arc du numéro du point de congé (#2 dans ton cas). Conséquence ton code les lira (et les liera) dans cet ordre.
SW se fiche de l'ordre des points, tout ce qui lui importe c'est de savoir quel point est relié à quel point pour tracer sa ligne (1-2 ou 1-5 c'est pareil pour lui).
Fais le test avec ton code sur une esquisse en W, vois le résultat, puis applique un congé sur les 3 points intermédiaires, et relance ton code, et vois le résultat.
Merci pour vos retours. Effectivement ce sont les congés qui perturbent l'ordre.
j'ai fait des tests avec GetLines2, il ne traite qu'une partie de l'esquisse également.
A noter que malgré les congés, SW est capable faire un tri croissant selon la position des points sur la trajectoire. Lors d'une contrainte trajectoire il est par exemple possible de saisir un pourcentage et l'objet se place à la position renseignée (cf PJ avec une boule à 50% de la trajectoire).
A priori avec les 4 fonctions évoquées il n'est pas possible d'accéder à ce tri suivant la trajectoire. La question serait alors:
Ce tri croissant est il accessible via les fonctions VBA ?
Avec IGetLines2 tu as un paramètre ArraySize qui, je suppose, te fournit le nombre de lignes et donc te permet de gérer le nombre d'itérations de ta boucle. J'imagine que ça devrait te permettre de parcourir et traiter la totalité de ton esquisse.
Merci pour ton retour. Je vais tester la fonction IGetLines2.
C'est un sujet que je traite en fil rouge quand j'ai de la dispo. Je vais laisser le sujet ouvert en attendant.
GetID(0) et GetID(1) renvoient chacune un entier, différent pour chaque point. J'ai fait des tris selon ces 2 valeurs, mais cela ne restitue pas la trajectoire.
J'ai bien noté qu'en VBA il y a les méthodes et les "I - méthodes":
Bonjour, De mémoire, je crois que la fonction de trajectoire dans une esquisse ordonne les entités, mais elle n'est accessible que pour des esquisses 2D. Sur un principe similaire, la macro jointe recherche une des extrémités d'une chaîne continue d'entités d'une esquisse 2D ou 3D, et les ordonne de façon croissante. Elle affiche également les points successifs de la chaîne, ce qui semble répondre à votre demande. La macro n'a été testée que sur les deux esquisses de l'exemple joint (SW 2021)...