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

Forum destiné aux questions et discussions en français
Forum rules
Règles du forum et informations utiles.

VEUILLEZ LIRE CECI AVANT DE DEMANDER DE L'AIDE
User avatar
rockn
Posts: 1509
Joined: Wed Sep 28, 2011 10:39 am
Location: Toulouse, France
Contact:

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

Postby rockn » Thu Dec 14, 2017 9:51 am

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 et tutoriels FreeCAD en Français, soutenez moi : https://www.tipeee.com/formations-freecad
lusa
Posts: 9
Joined: Sun Dec 10, 2017 5:37 pm

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

Postby lusa » Thu Dec 14, 2017 11:14 am

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 ?

Postby lusa » 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.
Attachments
uku_99.fcstd
(17.64 KiB) Downloaded 11 times
User avatar
Chris_G
Posts: 966
Joined: Tue Dec 31, 2013 4:10 pm
Location: France
Contact:

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

Postby Chris_G » Mon Dec 18, 2017 1:26 pm

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 ?

Postby lusa » 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.

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
Posts: 966
Joined: Tue Dec 31, 2013 4:10 pm
Location: France
Contact:

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

Postby Chris_G » Wed Dec 20, 2017 9:56 pm

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 ?

Postby lusa » Sat Nov 03, 2018 5:45 pm

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.