[résolu] Comment mesurer des longueurs le long d'une courbe ?

Forum destiné aux questions et discussions en français
Forum rules
Be nice to others! Read the FreeCAD code of conduct!
User avatar
rockn
Veteran
Posts: 1791
Joined: Wed Sep 28, 2011 10:39 am
Location: Toulouse, France
Contact:

Re: Comment mesurer des longueurs le long d'une courbe ?

Post by rockn »

Salut,
La méthode CurveOnSurface n'est disponible qu'avec la version 0.17 de FreeCAD.
Sur Ubuntu tu peux ajouter cette version à l'aide du ppa freecad-daily.
Les deux version freecad et daily cohabitent bien.
Formations - Assistance - Développement : https://freecad-france.com
lusa
Posts: 9
Joined: Sun Dec 10, 2017 5:37 pm

Re: Comment mesurer des longueurs le long d'une courbe ?

Post by lusa »

Bonjour à tous
Chris_G : l'erreur en question se produit même quand j'utilise le fichier uku_2 (celui que vous avez transformé et posté). Pour être le plus précis possible : j'ouvre le fichier avec FreeCad, je me place dans le module Draft, je clique sur la face (elle est alors verte et bordée de noir) puis je saisis les commandes dans la console et arrive à l'erreur citée.

Rockn : ma version est effectivement la 0.16. Je teste avec la 0.17 dès que possible et vous tiens au courant.

Merci pour toutes ces pistes.
lusa
Posts: 9
Joined: Sun Dec 10, 2017 5:37 pm

Re: Comment mesurer des longueurs le long d'une courbe ?

Post by lusa »

Bonjour
La méthode CurveOnSurface est effectivement présente dans la version 0.17 que j'ai testé, mais, bien que son exécution ne provoque pas de message d'erreur dans la console python, elle ne semble pas fonctionner correctement : les objets créés ne sont pas cohérents.
Comme je cherche une méthode facile et reproductible, je vais revenir à mon idée de mesure par parties de ma face. Pour cela, sur une copie de l'éclisse, je soustrais un "couteau" pour pouvoir mesurer les tronçons. (voir dans le fichier joint)
Merci encore pour vos conseils.
Attachments
uku_99.fcstd
(17.64 KiB) Downloaded 49 times
User avatar
Chris_G
Veteran
Posts: 2602
Joined: Tue Dec 31, 2013 4:10 pm
Location: France
Contact:

Re: Comment mesurer des longueurs le long d'une courbe ?

Post by Chris_G »

lusa wrote: Sun Dec 17, 2017 10:07 pm Bonjour
La méthode CurveOnSurface est effectivement présente dans la version 0.17 que j'ai testé, mais, bien que son exécution ne provoque pas de message d'erreur dans la console python, elle ne semble pas fonctionner correctement : les objets créés ne sont pas cohérents.
Comme je cherche une méthode facile et reproductible, je vais revenir à mon idée de mesure par parties de ma face. Pour cela, sur une copie de l'éclisse, je soustrais un "couteau" pour pouvoir mesurer les tronçons. (voir dans le fichier joint)
Merci encore pour vos conseils.
Comme vous voulez, mais ça risque d'être un peu fastidieux.
J'ai préparé un petit script python (FC 0.17)
Il suffit de le copier / coller dans la console python.
Il a 2 rôles différents, en fonction de ce qui est sélectionné au moment de son execution :

1 -----
- Sélectionner un objet type chemin SVG dans le Combo View ( pas dans la vue 3D ), tels que l'object "eclisse" de votre fichier précedent.
- copier / coller le script
- celui-ci va créer une "copie" de la courbe d'éclisse, mais cette copie sera en quelque sorte "millimétrée" et donc développable.
2 ------
- faire la suite des opérations normalement ( extrusion de la courbe / intersection avec une sphère ou un cylindre )
3 ------
- sélectionner la face à développer dans la vue 3D
- copier / coller à nouveau le script

Code: Select all


def flatten(face):
    "flattens a curvilinear face"
    #face is the face highlighted above
    edges = face.Edges

    # the list of 2D curves
    curves2d = [] 
    for e in edges:
        curves2d.append(face.curveOnSurface(e))

    # apply the 2D curves on a plane
    plane = Part.Plane()

    w = []
    for c in curves2d:
        w.append(c[0].toShape(plane,c[1],c[2]))

    wire = Part.Wire(w)

    Part.show(Part.Face(wire))




def curvi( obj, d):
    try:
        w = obj.Shape.Wires[0]
        pts = w.discretize(Distance=d)
        params = []
        for i in range(len(pts)-1):
            params.append(1.0 * i * d)
        params.append(w.Length)
        bs = Part.BSplineCurve()
        bs.interpolate(Points = pts, Parameters = params)
        Part.show(bs.toShape())
    except:
        FreeCAD.Console.PrintError("Error executing macro")


s = FreeCADGui.Selection.getSelectionEx()[0]

if s.HasSubObjects:
    flatten(s.SubObjects[0])
else:
    curvi(s.Object,5.0) 
    s.Object.ViewObject.Visibility = False

App.activeDocument().recompute()



lusa
Posts: 9
Joined: Sun Dec 10, 2017 5:37 pm

Re: Comment mesurer des longueurs le long d'une courbe ?

Post by lusa »

Bonjour Chris_G
Effectivement le script fonctionne !
Merci beaucoup.
Je pense que la succession des étapes générait mes erreurs dans la version 0.17.

Il y a visiblement des objets qui me semblent identiques mais qui sont très différents pour le logiciel.
Il me reste beaucoup à apprendre, je viens pas exemple de comprendre que lorsqu'on applique une opération booléenne à deux objets, un nouvel objet est créé, mais que ses deux précurseurs restent bien présents et utilisables (je les pensais détruits).

Je marque le post comme résolu.
User avatar
Chris_G
Veteran
Posts: 2602
Joined: Tue Dec 31, 2013 4:10 pm
Location: France
Contact:

Re: [résolu] Comment mesurer des longueurs le long d'une courbe ?

Post by Chris_G »

lusa wrote: Tue Dec 19, 2017 9:03 pm Bonjour Chris_G
Effectivement le script fonctionne !
Merci beaucoup.
Je pense que la succession des étapes générait mes erreurs dans la version 0.17.
Super !
Bonne nouvelle.
lusa wrote: Tue Dec 19, 2017 9:03 pm Il y a visiblement des objets qui me semblent identiques mais qui sont très différents pour le logiciel.
Les courbes et les surfaces utilisées dans les logiciels CAD sont des courbes et des surfaces paramétriques.
Ce sont des objets mathématiques un peu plus complexes que le simple tracé que l'on peut en voir à l'écran (comme nos yeux qui ne voient ni l'infrarouge, ni l'UV).
Dans le cas qui nous concerne, les 2 courbes d'éclisse ( l'originale et celle générée par le script python ) sont visuellement identiques. Mais elles sont mathématiquement différentes.
J'espère qu'on aura le plaisir de voir quelques photos de ce ukulele quand il sera terminé.
Bonne continuation,
Christophe
lusa
Posts: 9
Joined: Sun Dec 10, 2017 5:37 pm

Re: [résolu] Comment mesurer des longueurs le long d'une courbe ?

Post by lusa »

Hello
Le ukulélé est enfin terminé :D . Je ne dispose pas d'un compte permettant de déposer des photos.
Pour voir l'instrument fini, suivre ce lien http://www.lutherie-amateur.com/Forum/v ... 60#p627933
Merci encore à l'équipe de freecad et aux membres de ce forum.
Post Reply