Extraire iso de ligne SolidWorks - VBA

Bonjour à tous.

Ce sujet concerne solidworks - vba:

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.

Merci


exemple.png

Bonjour,

GetLines semble obsolète. Essaies avec GetLines2

https://help.solidworks.com/2020/english/api/sldworksapi/SOLIDWORKS.Interop.sldworks~SOLIDWORKS.Interop.sldworks.ISketch~GetLines2.html

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 ?


trajectoire.png

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.

EDIT: message à oublier...

1 « J'aime »

Concernant le GetID, que renvoie cette fonction ? Selon, il est peut-être possible d'associer l'id d'un point à une position sur le tracé.

EDIT: message effacé, j'étais à côté de la plaque. Désolé.

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":

GetLines2 & IGetLines2, GetID & IGetID, GetSpecificFeature2 & IGetSpecificFeature2

Souvent les I-Méthodes nécessitent plus de paramètres que les méthodes mais renvoient le même type d'objet.

Si tu as de la doc sur cette dualité Méthode et I-Méthode je suis intéressé.

à bientôt

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)...

Cordialement.


sketchptsorder.zip