Script pour filetage

Forum destiné aux questions et discussions en français
Forum rules
Be nice to others! Read the FreeCAD code of conduct!
gdo35
Posts: 189
Joined: Wed Jan 25, 2012 7:25 pm

Script pour filetage

Post by gdo35 »

Hello,

Vu que je viens de finir la première phase de mon projet, en attendant l'usinage semaine prochaine, j'ai voulu m'amuser un peu avec freecad.
J'ai deux vis M6 apparaissant dans mon projet. Je les ai modélisées par un cylindre mais je voudrais aller un peu plus loin et réaliser le filetage.

Pour ce faire, j'ai trouvé un script python de normandc sur ce topic.

Le voilà en entier :

Code: Select all

import Part, FreeCAD, math
from FreeCAD import Base

helix = Part.makeHelix(1,10,3)
edge1 = Part.makeLine((2.5,0,-0.125), (2.5,0,0.125))
edge2 = Part.makeLine((2.5,0,0.125), (3.1,0,0.419))
edge3 = Part.makeLine((3.1,0,0.419), (3.1,0,-0.419))
edge4 = Part.makeLine((3.1,0,-0.419), (2.5,0,-0.125))
section = Part.Wire([edge1,edge2,edge3,edge4])
makeSolid=0
isFrenet=1
pipe = Part.Wire(helix).makePipeShell([section],makeSolid,isFrenet)
Part.show(pipe)
Le python n'ayant plus de secrets pour moi, pas de soucis pour comprendre le script dans le sens informatique.
Maintenant j'aurais besoin d'aide pour le côté Freecad et mécanique.

Code: Select all

edge1 = Part.makeLine((2.5,0,-0.125), (2.5,0,0.125))
edge2 = Part.makeLine((2.5,0,0.125), (3.1,0,0.419))
edge3 = Part.makeLine((3.1,0,0.419), (3.1,0,-0.419))
edge4 = Part.makeLine((3.1,0,-0.419), (2.5,0,-0.125))
section = Part.Wire([edge1,edge2,edge3,edge4])
Dans ce bout de code, on crée 4 lignes avec la fonction makeLine du module Part et on les relie entre elles avec la fonction Wire du même module.
Est-ce que l'on peut dire que ça revient à créer une esquisse et que la fonction Wire crée une contrainte coïncidente entre les sommets de chaque ligne ?
Je ne trouve pas non plus la description de la fonction Wire dans l'API.

Code: Select all

pipe = Part.Wire(helix).makePipeShell([section],makeSolid,isFrenet)
Dans cette partie du code, pourquoi refaire appel à la fonction WIre ? Je ne vois pas ce qu'il y a à relier dans l'helix créé ?
Après je ne comprends pas trop ce que fait la fonction makePipeShell sachant que la doc que j'ai trouvé n'a pas le même prototype (dans l'API du module TopoShape).

Bon après je ne comprends pas trop ce que les répères de Frenet sont. J'ai lu vite fait Wikipedia mais là je suis un peu pommé. :mrgreen:

Merci,
++
gdo
gdo35
Posts: 189
Joined: Wed Jan 25, 2012 7:25 pm

Re: Script pour filetage

Post by gdo35 »

Je précise aussi un truc, il faut mettre la variable makeSolid à 1 pour que le cut qui permettra de créer le filetage fonctionne.
User avatar
NormandC
Veteran
Posts: 18589
Joined: Sat Feb 06, 2010 9:52 pm
Location: Québec, Canada

Re: Script pour filetage

Post by NormandC »

Salut,
gdo35 wrote:Le python n'ayant plus de secrets pour moi
Content pour toi. Après 3 ans d'efforts occasionnels, le python reste du chinois pour moi. Je n'ai définitivement pas le cerveau d'un programmeur. C'est trop abstrait pour moi. Ça me fait marrer que python soit un « langage orienté objet » : je regrette mais pour moi, un objet doit être tangible. ;)

Bref je n'utilise plus ce script depuis qu'il est possible de réaliser un pas de vis à l'aide des outils de l'interface graphique. En effet, l'outil Balayage (Sweep) de l'atelier Part fonctionne sur le même principe, et peut même utiliser plusieurs sections plutôt qu'une seule.

Pour l'hélice, on peut la créer via l'outil « Créer des primitives » de la barre d'outil Part (et qui se retrouve aussi dans le menu Pièce). Le principe est donc de balayer une section sur une trajectoire qui est l'hélice.

Et, contrairement à ce script, l'objet généré est paramétrique.
gdo35 wrote:Est-ce que l'on peut dire que ça revient à créer une esquisse et que la fonction Wire crée une contrainte coïncidente entre les sommets de chaque ligne ?
Non. II y a une distinction à faire entre les éléments de construction de base inhérents au noyau géométrique sous-jacent à FreeCAD, et les éléments de haut niveau créés à l'aide de FreeCAD.

Qu'est-ce qu'un noyau géométrique ? Il s'agit d'une bibliothèque logicielle qui gère la création de formes volumiques complexes via plusieurs outils avancés, les opérations booléennes, etc. FreeCAD utilise Open CASCADE. Open CASCADE (OCC) est plus qu'un noyau géométrique, c'est aussi un framework applicatif pour créer des applications 3D, mais FreeCAD n'utilise que le composant « noyau géométrique ». OCC par ailleurs utilise la représentation frontière, ou boundary representation en anglais, B-Rep. http://fr.wikipedia.org/wiki/B-Rep

Tous les logiciels de CAO 3D solide utilisent un noyau géométrique, et il n'en existe que quelques un dans le monde. Ces bibliothèques logicielles sont extrêmement complexes, c'est pourquoi de nombreux logiciels se contentent de payer les droits d'utilisation d'un noyau géométrique plutôt que de tenter d'en programmer un de zéro (notamment SolidWorks). Sans OCC qui est publié sous licence Open Source, l'existence de FreeCAD ne serait pas possible.

Dans la topologie des éléments de base d'OCC, la hiérarchie est la suivante :
sommet (point)
arête (edge), rejoignant 2 sommets
fil (wire), un groupe d'arêtes
un fil fermé forme une face
un ensemble de faces forme une coque (shell)
une coque formant un volume fermé permet de créer un solide.

Il y a aussi les composés (compounds), qui sont des groupes de coques ou de solides.

Ces éléments de construction sont dit de base car générés par le noyau, et ils n'offrent pas la possibilité d'être édités. Le script python cité plus haut fait appel à ces éléments de base via l'interface python. Le Wire n'a aucun besoin d'une contrainte coïncidente, il suffit que les sommets des lignes partagent les mêmes coordonnées dans l'espace (bref qu'ils se touchent).

Par comparaison, une esquisse dessinée depuis l'atelier Sketcher (ou Part Design, qui intègre les outils du Sketcher) génère des éléments de plus haut niveau, car des paramètres leur sont attribués. Une esquisse est paramétrique dans le sens où on peut l'éditer et modifier ses paramètres. Bien sûr, au final c'est la même forme qui est générée : les éléments de l'esquisse sont « traduits » à l'interne en éléments de base (wire) pour créer le solide. Mais contrairement au Wire, on peut modifier l'esquisse par la suite.
gdo35 wrote:Dans cette partie du code, pourquoi refaire appel à la fonction WIre ? Je ne vois pas ce qu'il y a à relier dans l'helix créé ?
Après je ne comprends pas trop ce que fait la fonction makePipeShell sachant que la doc que j'ai trouvé n'a pas le même prototype
Aucune idée pour l'explication détaillée du libellé de la commande, comme je l'ai dit je suis une quiche en python. Mais tel que dit plus haut, makePipeShell prend l'objet "section" (qui est un Wire) et le balaie le long de la trajectoire "helix" pour créer une forme tridimensionnelle. Le paramètre makesolid permet de créer un solide, sinon une coque est crée, ouverte aux deux extrémités.

D'ailleurs l'hélice n'est qu'un exemple de trajectoire, on peut utiliser d'autres types de chemins, avec l'aide de wmayer j'avais colligé ce script plus généraliste :
https://sourceforge.net/apps/mediawiki/ ... d_Sweep/fr

Pour isFrenet, c'est un réglage de OCC, même les devs de FreeCAD n'en connaissent pas la nature exacte. Tu peux voir un exemple dans ce billet (en anglais) de l'ancien gestionnaire de projet d'OCC : http://opencascade.blogspot.ca/2009/10/ ... part2.html

OCC étant produit par une société française, j'ai émis l'hypothèse que "isFrenet" (« est Frenet ») fait référence au mathématicien Jean Frédéric Frenet, sans en avoir confirmation. Faudrait demander à quelqu'un chez OCC !
gdo35
Posts: 189
Joined: Wed Jan 25, 2012 7:25 pm

Re: Script pour filetage

Post by gdo35 »

:o Ca c'est de l'explication.

Alors pour OpenCascade j'ai tout pigé. Je comprends mieux le fonctionnement maintenant. ;)
Je trainais ces interrogations depuis graphiteone et HeeksCAD.

Pour Frenet, je botte en touche pour le moment, trop complexe pour moi.

Je vais essayer de voir comment faire un pas de vis sans le script avec la méthode que tu me donnes.

Merci encore ;)
gdo
gdo35
Posts: 189
Joined: Wed Jan 25, 2012 7:25 pm

Re: Script pour filetage

Post by gdo35 »

Je ne m'en sors pas avec le balayage et l'hélice pour faire un filetage.

Je ne sais pas ce qui coince, j'ai toujours une erreur : Sections must be all closed or all open
J'essaye de recouper avec ce que tu m'as dis avant mais je bloque. :(

En plus mon hélice semble avoir un petit souci :
Image

OS: Ubuntu 12.10
Platform: 64-bit
Version: 0.13.1807 (Git)
Branch: master
Hash: 9eb41743156bc3522e778ce1e52c74669bc4c9fa
Python version: 2.7.3
Qt version: 4.8.3
Coin version: 3.1.3
SoQt version: 1.5.0
OCC version: 6.5.0
Attachments
test.fcstd
(12.58 KiB) Downloaded 214 times
User avatar
NormandC
Veteran
Posts: 18589
Joined: Sat Feb 06, 2010 9:52 pm
Location: Québec, Canada

Re: Script pour filetage

Post by NormandC »

Salut,

D'abord il y a un bogue évident avec les hélices. Au delà de 51 mm de long, ils finissent tous avec une trajectoire farfelue, pour un axe de tangage de 1 mm.

J'ai donc raccourci l'hélice à 50 mm. Il faudrait clairement aviser les devs de ce bogue. Des test supplémentaires sont peut-être de rigueur : voir à faire varier le rayon et l'axe de tangage et essayer de déterminer une « règle » constante à ce bogue.

Ton second problème est peut-être au niveau de l'utilisation de l'outil Balayage. Quand tu lances l'outil, le panneau latéral affiche deux colonnes : à gauche la liste des sections (ou profils) qui peuvent être utilisées, et qui peuvent soit être des esquisses ou certains autres éléments 2D de FreeCAD. À droite, la colonne qui indique la ou les sections à utiliser par la commande.

Mais pour le chemin/la trajectoire, celle-ci ne doit pas être ajoutée dans la colonne de droite ! Même si elle est listée comme disponible dans la colonne de gauche. Comme l'indique le texte au dessus des deux colonnes :
L'outil Balayage wrote:Sélectionnez au moins un profil dans la liste, puis une arête ou un fil dans la vue 3D comme chemin.
Il faut donc sélectionner l'hélice dans la vue modèle, et pas la déplacer dans la liste de droite.

Enfin, le troisième problème : ton profil est dessiné sur le plan XY, ce qui le rend pratiquement parallèle avec la trajectoire de l'hélice. Tu va donc obtenir un ruban plat hélicoïdal plutôt qu'une section rectangulaire. Il faut que tu déplace ton esquisse sur le plan XZ. Pour ce faire tu peux utiliser l'outil Édition --> Positionnement, en ayant sélectionné l'esquisse au préalable.

À noter aussi que le temps de calcul pour générer le balayage m'apparaît anormalement élevé, même sur mon PC tout neuf (i5-3570K quadri-cœur de 3m2 GHz).
gdo35
Posts: 189
Joined: Wed Jan 25, 2012 7:25 pm

Re: Script pour filetage

Post by gdo35 »

Oui oui pour l'helice je m'en doutais un peu qu'elle était buguée :mrgreen:
Je vais poster un bug dans la journée.

Pour le balayage, je mettais tout dans la colonne de droite pensant que le premier membre était le profil et le second la trajectoire.
Je vais refaire un essai.
gdo35
Posts: 189
Joined: Wed Jan 25, 2012 7:25 pm

Re: Script pour filetage

Post by gdo35 »

Salut,

Bon je reviens à la charge concernant le filetage.

Je fais maintenant la "bonne" manip et après de longues longues minutes j'obtiens quelque chose de difforme :
Image

Chaque fois que je veux ré-ouvrir mon fichier, ca prend aussi de très très longues minutes sur mon intel i7 quad core...

est-ce que je fais quelque chose de la mauvaise manière ou est-ce un bug ?

Je mets le fichier .fcstd en PJ.

++
gdo
Attachments
test.fcstd
(64.03 KiB) Downloaded 212 times
User avatar
flachyjoe
Veteran
Posts: 1891
Joined: Sat Mar 31, 2012 12:00 pm
Location: Limoges, France

Re: Script pour filetage

Post by flachyjoe »

Salut,
pour qu'il n'y ait pas de déformation, il faut passer le paramètre Frenet à true.
La différence se trouve au niveau de la rotation de la section le long de la trajectoire, sans le paramètre Frenet elle tourne aussi autour de son axe Z. Ce qui provoque la déformation.
Pour la vitesse de calcul, c'est simplement que ça crée un paquet de sections intermédiaires, il vaudrait peut être mieux faire un seul tour de filet puis le dupliquer. Mais alors il y a souci qui apparaît : c'est que la fonction Sweep est dans l'atelier Part et que la fonction de répétition linéaire est dans l'atelier PartDesign, elles ne sont donc pas compatibles...

Bonne continuation.
- Flachy Joe -
Image
User avatar
NormandC
Veteran
Posts: 18589
Joined: Sat Feb 06, 2010 9:52 pm
Location: Québec, Canada

Re: Script pour filetage

Post by NormandC »

flachyjoe wrote:Mais alors il y a souci qui apparaît : c'est que la fonction Sweep est dans l'atelier Part et que la fonction de répétition linéaire est dans l'atelier PartDesign, elles ne sont donc pas compatibles...
Plus précisément, l'outil de répétition linéaire de Part Design ne fonctionne qu'avec des fonctions Part Design d'un solide existant. D'autres fonctions de Part Design sont tout à fait compatibles avec des outils de l'atelier Part, ce sont les outils de transformation de Part Design (répétition linéaire/circulaire, symétrie, transformation multiple) qui ne fonctionnent qu'avec des fonctions Part Design.

Je pense que je l'ai déjà mentionné : Part Design créé des fonctions (features) liées à un même solide, alors que Part créé des objets différents, qui peuvent être soit solides, soit surfaciques.

À noter, l'outil Draft Array peut faire des répétitions linéaires et radiales de solides ou surfaces Part. Il pourrait donc être employé ici, il suffirait ensuite de joindre le Array avec la tête de la vis en utilisant une fusion booléenne.
Post Reply