Commande pour obtenir la longueur d'un segment ouvert (ligne, spline, etc ...)?

Bonjour,

je cherche à récupérer la longueur d'une ligne et d'une spline (voir les deux combinées).

 

Je suis tombé sur ce lien qui contient ce dont j'ai besoin ( enfin j'en suis persuadé), mais je ne sais pas quoi correspondent précisément toutes ces commandes (Length,ArcLength, etc ...) et ce qu'il faut sélectionner (entitées) pour avoir la bonne longueur : 

http://help.solidworks.com/2016/english/api/sldworksapi/Measure_Selected_Entities_Example_VBNET.htm

 

 

Bonjour

Essaie la côte de longueur de trajectoire (dans "cotations intelligentes)

Je recherche la bonne "macro" qui pourrait me permettre de récupérer la longueur

Bonjour,

Tu sélectionnes ta ligne avant à la main ?

C'est plutôt ce lien qu'il te faut pour VBA (plutôt que VB.NET) :

http://help.solidworks.com/2015/English/api/sldworksapi/Measure_Selected_Entities_Example_VB.htm

 

J'utilise SOLIDWORKS Visual Studio Tools for Application.

Il me semble que c'est en VB.net.

A part la syntaxe qui change un peu , le lien que j'ai donné ou celui qui renvoit vers le VBA , propose exactement la même chose.

Après quelques essais je n'arrive pas à avoir de valeur autre que "-1" ce qui veut dire que je ne mesure "rien".

@ PL. je ne sélectionne rien à la main. Je créer une ligne ou une spline, je veux sélectionner l'entitée et mesurer sa longueur, tout ça sans passer par l'interface.

 

En pièce-jointe une macro pour construire une ligne et mesurer sa longueur (avec pour résultat -1 )

 


exemple.txt

Oui si tu utilise Visual Studio c'est bien du vb.net.

Ta ligne est bien sélectionnée à l'écran avant de lancer la mesure ?

As-tu essayé l'instruction pour mesurer en VBA dans SolidWorks en sélectionnant une ligne crée à la main ? Est-ce que ça fonctionne ?

@ .PL,

je ne suis pas certain de te suivre : pourquoi regarder à l'écran si elle est bien sélectionnée la ligne alors que je scripte la macro? Et j'ai essayé l'instruction en VB.net pas VBA (mais c'est la même chose donc je le ferai pas en VBA).

Quoiqu'il en soit, lorsque je tente d'enregistrer la macro pour mesurer quoique ce soit, il n'y a aucune trace de fonction pour mesure, simplement la commande de selection d'entité.

En fait, j'ai un doute sur ce qu'il faut sélectionner ( avec la fonction SelectByID2) pour mesurer une ligne, une spline, ou récupérer les coordonnées d'un point?  Pour le moment le seul résultat que j'ai c'est "-1"

Bonjour, 

j'ai une simple question, le fait d'utiliser l'outil de mesure avec la touche "ctrl" donne  bien une longeur total de l'esquisse. cette methode ne convient elle pas? solution basique, simple  mais qui donne des résultats.

que la force soit avec toi.


lg.jpg
3 « J'aime »

Oui, je posais la question dans le cas où tu testais en VBA et pas VB.NET.

Sinon, un lien avec un exemple :

https://forum.solidworks.com/thread/107636

Voir aussi :

https://forum.solidworks.com/thread/34496

https://forum.solidworks.com/thread/63630

Ou peut-être qu'il faut utiliser cette instruction GetLength3 :

http://help.solidworks.com/2012/English/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.ICurve~GetLength3.html

 

@ OBI WAN

Oui, avec l'outil de mesure je peux récupérer visuellement les longueurs, distances, coordonnées que je veux à l'écran. Mais je souhaite faire des calculs derrière pour répartir des points sur la trajectoire de façon uniformes et tout ça de manière automatique. Il me faut donc les fonctions vba/vbnet pour le faire

 

@ .PL

J'ai résolue le problème avec les fonctions trouvé dans l'aide API solidworks (premier lien que j'ai donné pour le vbnet et celui que tu avais indiqué pour le vba). Pour pouvoir faire la mesure sur les entitées j'ai du sortir de l'esquisse avec la commande :

swDoc.SketchManager.Insert3DSketch(True)

Pour le reste j'ai sélectionné la bonne entité et utilisé les fonctions/commandes trouvés dans l'aide API :

exemple pour la mesure d'une ligne, spline puis les deux entitées :

        ' Mesure longueur ligne
        boolstatus = swDoc.Extension.SelectByID2("Line1@Esquisse3D1", "EXTSKETCHSEGMENT", 0.0, 0.0, 0.0, False, 0, Nothing, 0)
        swMeasure = swDoc.Extension.CreateMeasure
        swMeasure.ArcOption = 0
        boolstatus = swMeasure.Calculate(Nothing)
        Ll = swMeasure.Length
        Debug.Print("longueur ligne = " & Ll * 1000 & " mm")
        swDoc.SketchManager.Insert3DSketch(True)
        swDoc.ClearSelection2(True)

       ' Mesure longueur spline 1
        boolstatus = swDoc.Extension.SelectByID2("Spline1@Esquisse3D1", "EXTSKETCHSEGMENT", 0.0, 0.0, 0.0, False, 0, Nothing, 0)
        swMeasure = swDoc.Extension.CreateMeasure
        swMeasure.ArcOption = 0
        boolstatus = swMeasure.Calculate(Nothing)
        LS1 = swMeasure.ArcLength
        Debug.Print("longueur spline1 = " & LS1 * 1000 & " mm")
        swDoc.SketchManager.Insert3DSketch(True)
        swDoc.ClearSelection2(True)

        ' Mesure de la longueur totale de la fibre neutre de maille
        boolstatus = swDoc.Extension.SelectByID2("Line1@Esquisse3D1", "EXTSKETCHSEGMENT", 0.0, 0.0, 0.0, False, 0, Nothing, 0)
        boolstatus = swDoc.Extension.SelectByID2("Spline1@Esquisse3D1", "EXTSKETCHSEGMENT", 0.0, 0.0, 0.0, True, 0, Nothing, 0)
        swMeasure = swDoc.Extension.CreateMeasure
        swMeasure.ArcOption = 0
        boolstatus = swMeasure.Calculate(Nothing)
        Lt = swMeasure.TotalLength
        Debug.Print("Longueur Lt = " & Lt * 1000 & " mm")

 

Merci pour votre aide