[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
lusa
Posts: 9
Joined: Sun Dec 10, 2017 5:37 pm

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

Postby lusa » Sun Dec 10, 2017 6:45 pm

Bonjour
Petit nouveau par ici, j'espère ne pas poster au mauvais endroit.
Mon problème : j'essaie de modéliser les éclisses (côtés) d'une guitare acoustique avec FreeCad. La table et le fond étant à peu près sphériques, ces éclisses ne sont pas rectangulaires.
Un exemple avec une courbure exagérée :
Image
Image
Pour que ce modèle soit le plus utilisable possible, il faudrait que je puisse le dérouler : il y a bien une macro UnrollRuledSurface mais elle donne des résultats étranges.
Image
L'autre solution serait de pouvoir mesurer précisément la longueur le long de l'éclisse pour reporter les mesures ailleurs.
Existe-t-il un moyen d'y parvenir ?
La macro FCinfo est un début de réponse, elle mesure bien la longueur de la courbe, mais ne permet pas d'en mesurer des tronçons. Y a-t-il une piste à creuser autre que de couper la courbe en morceaux et de mesurer chacun d'eux ?

Ma version :
OS: Ubuntu 14.04.1 LTS
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.16.6712 (Git)
Build type: None
Branch: releases/FreeCAD-0-16
Hash: da2d364457257a7a8c6fb2137cea12c45becd71a
Python version: 2.7.6
Qt version: 4.8.6
Coin version: 4.0.0a
OCC version: 6.8.0.oce-0.17
Last edited by lusa on Tue Dec 19, 2017 9:04 pm, edited 1 time in total.
thschrader
Posts: 1234
Joined: Sat May 20, 2017 12:06 pm
Location: Germany

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

Postby thschrader » Mon Dec 11, 2017 12:21 am

survey.JPG
survey.JPG (30.63 KiB) Viewed 853 times
survey2.JPG
survey2.JPG (86.32 KiB) Viewed 853 times
OS: Windows 10
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.17.12772 (Git)
Build type: Release
Branch: master
Hash: c8c9b76f43d2c78c4afb65b756f3f07d626aac85
Python version: 2.7.8
Qt version: 4.8.7
Coin version: 4.0.0a
OCC version: 7.1.0
Locale: German/Germany (de_DE)
lusa
Posts: 9
Joined: Sun Dec 10, 2017 5:37 pm

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

Postby lusa » Mon Dec 11, 2017 9:25 pm

Merci !
Entre temps, j'avais fini par trouver la commande :
Gui.Selection.getSelectionEx()[0].SubObjects[0].Length
Mais la commande "survey" est bien pratique.
mario52
Posts: 2400
Joined: Wed May 16, 2012 2:13 pm

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

Postby mario52 » Tue Dec 12, 2017 10:56 am

Bonjour lusa et bienvenue sur le forum

pouvez vous SVP donnez un exemple de votre fichier ? (ou la différence constatée)

je suis l'auteur de la macro FCinfo et je ne comprend pas bien votre demande car le code que vous mentionnez est le même code qui est utilisé pour détecte la longueur dans ma macro !

ps: je suis justement en train de mettre à jour cette macro avec ajout de création de plans, axes, points (repères) au coordonnées affichées (demandé par un utilisateur) et ajout de ses modification sur "Moment of inertia" FCMacro and moment of inertia of assembly dont je ne connait rien

mario
Maybe you need a special feature, go into Macros_recipes and Code_snippets. My macros on Gist.github
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 12, 2017 8:52 pm

Bonjour Mario52
Et merci de prendre le temps de vous pencher sur mon problème.

Donc mon souci est de prendre différentes mesures sur un modèle d'éclisse afin d'en faciliter la réalisation pratique.
Il s'agit de savoir où cintrer le bois et également d'avoir une idée approximative de la hauteur à retirer de la pièce puisqu'on part de planches de forme rectangulaire.
Il n'est pas utile d'avoir une précision extrême à ce niveau puisque de toutes manières le cintrage de l'éclisse ainsi que la voûte de la table ne se font jamais de façon idéale.

Ce que je cherche est donc une procédure permettant de mesurer :
- la longueur totale de l'éclisse (en suivant la courbe)
- les longueurs intermédiaires : elles correspondent aux repères de cintrage (traits en rouge sur le modèle)
- les hauteurs de l'éclisse à ces différents repères.
Votre macro permet bien la mesure de la longueur totale, mais pas celle des longueurs intermédiaires (ou du moins je n'ai pas trouvé)
J'espérais que le code (que j'ai extrait de votre macro) m'aiderait mais je n'ai pas eu le temps de creuser plus que cela.

En attendant, j'envisage 2 options moyennement élégantes :
- doubler le dessin de l'éclisse avec un dessin par morceau puis mesurer
- couper mon modèle en tronçons avec les outils booléens puis mesurer
Attachments
uku_1.fcstd
(16.15 KiB) Downloaded 20 times
User avatar
Chris_G
Posts: 893
Joined: Tue Dec 31, 2013 4:10 pm
Location: France
Contact:

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

Postby Chris_G » Tue Dec 12, 2017 9:51 pm

Bonjour lusa,
Le processus n'est pas directement accessible dans l'interface de FreeCAD, mais avec l'aide d'un peu de scripts python, on peut obtenir la forme de l'éclisse "dépliée" (cf ce post).

uku_2.fcstd
(236.85 KiB) Downloaded 26 times
lusa
Posts: 9
Joined: Sun Dec 10, 2017 5:37 pm

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

Postby lusa » Wed Dec 13, 2017 3:39 pm

Bonjour Chris_G
Merci pour votre éclairage.
Ce que vous proposez est très exactement ce que je cherche... sauf que je suis incapable de le reproduire.
Que ce soit à partir de la console ou d'un script, je butte sur :

>>> CetteFace=Gui.Selection.getSelectionEx()[0].SubObjects[0]
>>> edges=CetteFace.Edges
>>> curves2d = []
>>> for e in edges:
... curves2d.append(CetteFace.curveOnSurface(e))
...
Traceback (most recent call last):
File "<input>", line 2, in <module>
AttributeError: 'Part.Face' object has no attribute 'curveOnSurface'

>>>

Soit j'essaie d'appliquer curveOnSurface sur le mauvais objet,
soit un module manque dans mon installation, soit ...
ffvpor
Posts: 13
Joined: Wed Sep 07, 2016 5:03 pm
Location: Blagnac, France

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

Postby ffvpor » Wed Dec 13, 2017 5:29 pm

Bonjour lusa

Soit il.. s'agit simplement d'un problème d'indentation de code. Ton code

Code: Select all

>>> CetteFace=Gui.Selection.getSelectionEx()[0].SubObjects[0]
>>> edges=CetteFace.Edges
>>> curves2d = []
>>> for e in edges:
... curves2d.append(CetteFace.curveOnSurface(e))
... 
Ma proposition : après la ligne for e in edges: valide par entrée puis la touche tabulation puis curves2d.append(CetteFace.curveOnSurface(e)). Tu peux ensuite utiliser curves2d.

Code: Select all

>>> CetteFace=Gui.Selection.getSelectionEx()[0].SubObjects[0]
>>> edges=CetteFace.Edges
>>> curves2d = [] 
>>> for e in edges:
... 	curves2d.append(CetteFace.curveOnSurface(e))
... 

>>> for key in curves2d:
...     print key
... 
(<Line2d object>, 0.0, 1.0)
(<Line2d object>, 0.0, 23.5410215726502)
(<BSplineCurve2d object>, 0.0, 1.0)
(<Line2d object>, 0.0, 40.2872970261629)
>>> 
lusa
Posts: 9
Joined: Sun Dec 10, 2017 5:37 pm

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

Postby lusa » Wed Dec 13, 2017 7:49 pm

Merci ffvpor
C'est vrai l'indentation n'apparaît pas dans le code que j'ai copié (mystère de l'informatique), mais elle était bien présente dans mes tentatives.
Désolé de n'avoir pas bien copié mon code entre deux balises "code".
Donc la sortie :

Code: Select all

>>> CetteFace=Gui.Selection.getSelectionEx()[0].SubObjects[0]
>>> edges=CetteFace.Edges
>>> curves2d = []
>>> for e in edges:
... 	curves2d.append(CetteFace.curveOnSurface(e))
... 
Traceback (most recent call last):
  File "<input>", line 2, in <module>
AttributeError: 'Part.Face' object has no attribute 'curveOnSurface'

C'est malheureusement une autre erreur (j'aurais bien aimé).
User avatar
Chris_G
Posts: 893
Joined: Tue Dec 31, 2013 4:10 pm
Location: France
Contact:

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

Postby Chris_G » Wed Dec 13, 2017 9:32 pm

Bonsoir,
Pas facile de deviner l'origine de l'erreur à l'aveugle.
Pourriez-vous joindre un fichier qui produit l'erreur ?