Problème de fusion entre un cylindre et un tore

Forum destiné aux questions et discussions en français
Forum rules
Be nice to others! Read the FreeCAD code of conduct!
Post Reply
User avatar
NormandC
Veteran
Posts: 18589
Joined: Sat Feb 06, 2010 9:52 pm
Location: Québec, Canada

Problème de fusion entre un cylindre et un tore

Post by NormandC »

Ceci est une discussion qui fait suite au bogue rapporté ici : https://sourceforge.net/apps/mantisbt/f ... php?id=458

Pour le bénéfice de lecteurs éventuels, je fais un récapitulatif: luciol44 éprouvait des difficultés à fusionner plusieurs objets primitifs pour former un tube cintré en U, il faut savoir que le noyau géométrique d'Open CASCADE éprouve des difficultés avec les opérations booléennes, en particulier quand elles contiennent des tores. D'autre part, après analyse, un des développeurs a mentionné que certains éléments semblaient ne pas coïncider (il faut que leurs faces soient précisément coplanaires pour qu'une fusion réussisse).

J'ai donc proposé une autre méthode, plus simple, qui utilise le principe de balayage d'un profil fermé le long d'une trajectoire. Le fichier exemple est disponible ici.
luciol44 wrote:Bonjour Normanac,

J'ai telechargeé ton fichier et je n'arrive pas à l'ouvrir. Plantage de FreeCad.
quel version de FreeCad as tu? Je suis sur la 0.11.

Si non je suis quand même preneur pour ton script.
Je viens de penser que ce fichier a été créé avec la version 0.12 instable de FreeCAD, je suppose donc que le plantage de l'application s'explique par le fait qu'il fait appel à des fonctionnalités qui n'existaient pas dans la version 0.11.

Il faudrait donc que tu installes la version 0.12. Si tu es sous Windows, tu trouveras la dernière version disponible ici : https://sourceforge.net/projects/free-c ... 0unstable/

Si tu es sous Ubuntu, nous avons deux dépôts PPA qui proposent des versions à jour, voir la documentation d'Ubuntu-fr pour savoir comment procédéer (c'est moi qui l'ai rédigée) : http://doc.ubuntu-fr.org/freecad

La version 0.12 est en cours de finalisation, la version finale devrait sortir très prochainement (une question de semaines tout au plus). Elle est donc plutôt stable.

Je poste le script dans le prochain message.
User avatar
NormandC
Veteran
Posts: 18589
Joined: Sat Feb 06, 2010 9:52 pm
Location: Québec, Canada

Re: Problème de fusion entre un cylindre et un tore

Post by NormandC »

Voici un tuto rapide pour expliquer comment réaliser un balayage dans FreeCAD.

Tel que mentionné plus tôt, cette méthode requiert la version 0.12. FreeCAD intègre déjà des fonctionnalités de modélisation complexes, mais elles ne sont pas toutes intégrées dans l'interface graphique. Heureusement, on peut accéder à ces fonctions avec de la programmation en language Python. Les scripts (ou macros) permettent d'automatiser les commandes et de ne pas toucher à la console.

Le script suivant doit être sauvegardé dans un fichier texte avec pour extension .FCMacro ou .py, dans le répertoire des macros de FreeCAD. Par défaut ce répertoire n'existe pas, vous devez donc le sélectionner soit dans les préférences (menu Édition), ou encore dans la boîte de dialogue de macros.

Code: Select all

import Part, FreeCAD, math, PartGui, FreeCADGui
from FreeCAD import Base

# prendre les objets selectionnes, avec la 1ere selection pour trajectoire et la 2eme pour la section a balayer
s = FreeCADGui.Selection.getSelection()
try:
    shape1=s[0].Shape
    shape2=s[1].Shape
except:
    print "Wrong selection"

traj = Part.Wire([shape1])
section = Part.Wire([shape2])

# creer un objet Piece dans le document actif
myObject=App.ActiveDocument.addObject("Part::Feature","Balayage")

# declarer la variable makeSolid pour creer un solide, changer valeur a 0 pour creer des surfaces
makeSolid = 1
# l'utilite de la valeur isFrenet est inconnue, changer a 0 si le resultat est bizarre
isFrenet = 1

# Creer la forme 3D et l'assigner a l'objet Piece
Balayage = Part.Wire(traj).makePipeShell([section],makeSolid,isFrenet)
myObject.Shape = Balayage
La méthodologie
  1. Ouvrir l'atelier Sketcher ou le Part Design
  2. Créer une première esquisse qui sera la trajectoire du balayage. Ce tracé correspond à la ligne centre du tube cintré.
    Image
  3. Créer une seconde esquisse pour la section du balayage. Il s'agit du profil du tube (donc un cercle). Il faut que le centre du cercle soit coïncident avec un des bouts de la trajectoire, et que son plan soit normal (perpendiculaire) à celui de la trajectoire.
    Image
  4. Optionnel : créer une troisième esquisse pour le profil intérieur du tube. Le cercle doit être concentrique avec celui de la seconde esquisse.
    Image
  5. Maintenant que les esquisses sont faites, sélectionner d'abord la trajectoire (Sketch), et ensuite la première section (Sketch001). L'ordre est important !
  6. Ouvrir la boîte de dialogue des macros, sélectionner la macro précédemment créée (ici nommée « balayage.FCMacro »), puis cliquer sur le bouton « Lancer ».
    Image
  7. Un balayage aura été créé, et un objet Balayage aura été ajoutée dans l'arborescence du panneau latéral.
    Image
  8. Répéter cette fois avec la trajectoire et la seconde section (Sketch002). Un objet Balayage001 sera créé dans l'arborescence.
  9. Maintenant, on fait une soustraction booléenne pour évider le tube. Ouvrir l'atelier Part, sélectionner d'abord l'objet Balayage, ensuite l'objet Balayage001. Puis, cliquer sur l'outil de soustraction booléenne.
    Image
  10. Un objet Cut a maintenant été ajouté dans l'arborescence, et les deux balayages ont été placés sous lui.
    Image
Quelques conseils :
  • Travailler sur des plans standards. J'ai fait la trajectoire sur le plan XY, en prenant soin de placer les bouts coïncidents au plan XZ. Donc les sections se trouvent sur le plan XZ. J'aurais pu me faciliter la vie en décalant la trajectoire afin de faire coïncider le bout d'où démarre la section avec l'axe Y, ainsi j'aurais pu centrer au point (0,0,0) les sections.
  • Le Sketcher ne permet actuellement pas les contraintes extérieures : c'est-à-dire qu'il n'est pas possible de dimensionner les sections par rapport à la trajectoire, ou les cercles entre eux. Il faut donc utiliser des contraintes dimensionnelles absolues (par rapport aux axes d'origine), et faire un petit calcul mental au besoin. Donc conseil #3 : utiliser de beaux chiffres ronds. ;)
Voilà, en espérant le tout utile, n'hésitez pas à poser des questions. :)
User avatar
NormandC
Veteran
Posts: 18589
Joined: Sat Feb 06, 2010 9:52 pm
Location: Québec, Canada

Re: Problème de fusion entre un cylindre et un tore

Post by NormandC »

Bon,

Je viens de me rendre compte que la section n'a pas besoin d'être située au bout de la trajectoire !

Image

Aussi :
  • La section n'a pas besoin d'être sur la trajectoire (dans le cas contraire, le balayage est simplement décalé par rapport à la trajectoire)
  • La trajectoire peut être un profil fermé (comme un cercle)
Voilà donc un outil fort polyvalent ! :)
User avatar
Kunda1
Veteran
Posts: 13434
Joined: Thu Jan 05, 2017 9:03 pm

Re: Problème de fusion entre un cylindre et un tore

Post by Kunda1 »

Apologies for posting in English. Updates to issue #458 were made 2 years ago (2015) by @ickby & @shoogen
shoogen wrote:http://tracker.dev.opencascade.org/view.php?id=25771
I can't tell if the parts are properly aligned.
ickby wrote:According to the occ guys this is indeed an alignment error. We need to have a look at the transformation precission used in freecad.

Sebastian, I vaguely remember that you have done something in this regard already, was it the precission of the numbers written in the python interpreter? Does this fix this issue? Or was this only a experiment?

shoogen wrote:In the past FreeCAD made it very easy to damage a file due misalignment by rounding in the QSpinboxes or by limiting the numbers of significant digits in th python console output.
Werner a I addresses many of those issues before the 0.14 release.
This ticket and the posted example files predates those improvements.
Still, if have a object exactly placed you should not uses the property editor on the placement afterwards.
As i don't know how luciol44 aligned the objects in this file, I can't tell if the problem was solved.
Perhaps someone might try to align the pipe segments with Werner's align tool.
Alone you go faster. Together we go farther
Please mark thread [Solved]
Want to contribute back to FC? Checkout:
'good first issues' | Open TODOs and FIXMEs | How to Help FreeCAD | How to report Bugs
Post Reply