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.
[résolu] Comment mesurer des longueurs le long d'une courbe ?
Forum rules
Be nice to others! Read the FreeCAD code of conduct!
Be nice to others! Read the FreeCAD code of conduct!
Re: Comment mesurer des longueurs le long d'une courbe ?
Formations - Assistance - Développement : https://freecad-france.com
Re: Comment mesurer des longueurs le long d'une courbe ?
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.
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.
Re: Comment mesurer des longueurs le long d'une courbe ?
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.
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
Re: Comment mesurer des longueurs le long d'une courbe ?
Comme vous voulez, mais ça risque d'être un peu fastidieux.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.
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()
Re: Comment mesurer des longueurs le long d'une courbe ?
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.
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.
Re: [résolu] Comment mesurer des longueurs le long d'une courbe ?
Super !
Bonne nouvelle.
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
Re: [résolu] Comment mesurer des longueurs le long d'une courbe ?
Hello
Le ukulélé est enfin terminé . 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.
Le ukulélé est enfin terminé . 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.