Créer une barre à partir d'une ligne

Forum destiné aux questions et discussions en français
Forum rules
Be nice to others! Read the FreeCAD code of conduct!
User avatar
rockn
Veteran
Posts: 1791
Joined: Wed Sep 28, 2011 10:39 am
Location: Toulouse, France
Contact:

Créer une barre à partir d'une ligne

Post by rockn »

Bonjour,

Est il possible de créer une barre (un objet plein) à partir d'une ligne ?

Exemple : Je veux créer une barre rectangulaire de 500 unités de long et de section rectangulaire de 12 unité de base et 24 unités de hauteur.
Pour l'instant je dois créer une esquisse d'un rectangle de 24*500 unités et ensuite l'extruder de 12 unités de large.

Je trouve cette solution "archaïque"... ;)

Je m'explique, dans ma démarche de technicien charpentier bois je dessine d'abord le schéma statique de ma structure a l'aide de ligne, pour ça l'atelier "Sketcher" est parfait. Maintenant ces lignes représentent en réalité la fibre neutre des mes barres. Du coup je voudrais créer des pièces à partir de ces lignes. Ce serait peut être un module à rajouter dans l'atelier "Architecture" on clique sur une ligne est on pourrait choisir le profil de la barre et les sections.

Qu'en pensez vous ?
Formations - Assistance - Développement : https://freecad-france.com
User avatar
NormandC
Veteran
Posts: 18589
Joined: Sat Feb 06, 2010 9:52 pm
Location: Québec, Canada

Re: Créer une barre à partir d'une ligne

Post by NormandC »

Salut,

Il n'y a rien d'archaïque là-dedans. :roll: Tous les logiciels de CAO paramétriques fonctionnent de cette façon, c'est la base de la modélisation.

Les logiciels commerciaux (SolidWorks, Solid Edge, Inventor) ont des fonctionnalités de structures mécano-soudées qui fonctionnent de façon similaire à ce que tu désires : on dessine une structure filaire en 3D puis on applique des profils à ces lignes. FreeCAD a le potentiel pour ajouter un tel module, mais il y a bien d'autres choses à lui ajouter avant. Sans compter qu'un tel usage ne trouvera d'utilité qu'auprès d'une infime minorité d'utilisateurs.
User avatar
rockn
Veteran
Posts: 1791
Joined: Wed Sep 28, 2011 10:39 am
Location: Toulouse, France
Contact:

Re: Créer une barre à partir d'une ligne

Post by rockn »

Salut,

Bon effectivement, je trouve ça archaïque parce que c'est pas comme ça que j'ai l'habitude de travailler avec les soft propriétaire et commerciaux que j'utilise dans mon métier. Pour info (SEMA Holzbauprogramme, Cadwork, Dietrich's)

La où je ne suis pas d'accord c'est quand tu dis que cela n’intéresse qu'une minorité de personne, ceci devient faux à partir du moment où le module "Architecture" à fait son apparition.
En effet si FreeCAD propose des solutions logiciels pour traité les corps de métiers du bâtiment, cela concerne un grand nombre d'utilisateur potentiel.( Architectes, Génie Civil, Génie Climatique, tous les corps de métiers du bâtiment).

En tous cas ça me donne envie de programmer une petite gui afin de créer des "barres" à partir d'une ligne.
Je vois la chose ainsi :
Création d'une ligne dans l'espace
Création d'une surface rectangulaire (qui sera la section de la barre) dans le plan perpendiculaire à la ligne et passant par une des extrémités (donc la normale de la surface correspond à la ligne).
9 positions possible de cette surface par rapport à une extrémité de la ligne (les 4 coins de la surface, les 4 milieu d'arrete et le centre de la surface)
Puis extrusion de la surface à la longueur données par la ligne.

Le seul problème que je vois c'est que je n'arrive pas à travailler dans un plan voulu. Une idée de comment on fait ?
Formations - Assistance - Développement : https://freecad-france.com
User avatar
NormandC
Veteran
Posts: 18589
Joined: Sat Feb 06, 2010 9:52 pm
Location: Québec, Canada

Re: Créer une barre à partir d'une ligne

Post by NormandC »

Salut,
rockn wrote:La où je ne suis pas d'accord c'est quand tu dis que cela n’intéresse qu'une minorité de personne, ceci devient faux à partir du moment où le module "Architecture" à fait son apparition.
En effet si FreeCAD propose des solutions logiciels pour traité les corps de métiers du bâtiment, cela concerne un grand nombre d'utilisateur potentiel.( Architectes, Génie Civil, Génie Climatique, tous les corps de métiers du bâtiment).
Et pourtant. Je maintiens que sur l'ensemble des utilisateurs de FreeCAD, une minorité sera intéressée à un module tel que tu recherches, même si ce module permettait de travailler également les profilés métalliques. On parle de quelque chose de très spécialisé. Par exemple pour ma part j'aimerais qu'un module de tôlerie soit ajouté, parce que ça fait partie de mon travail, mais je suis conscient que l'intérêt pour un tel module resterait limité. Pour l'instant, et dans un horizon à plus ou moins moyen terme, je crois que FreeCAD va rester un outil pour les hobbyistes. Le jour où ses fonctionnalités de base seront complètes et qu'il sera assez stable, alors peut-être on verra un intérêt des milieux professionnels. Mais je crois que l'absence d'un soutien technique payant risque d'être un frein à son adoption.
rockn wrote: En tous cas ça me donne envie de programmer une petite gui afin de créer des "barres" à partir d'une ligne.
Je vois la chose ainsi :
Création d'une ligne dans l'espace
Création d'une surface rectangulaire (qui sera la section de la barre) dans le plan perpendiculaire à la ligne et passant par une des extrémités (donc la normale de la surface correspond à la ligne).
9 positions possible de cette surface par rapport à une extrémité de la ligne (les 4 coins de la surface, les 4 milieu d'arrete et le centre de la surface)
Puis extrusion de la surface à la longueur données par la ligne.
C'est exactement de cette façon que fonctionnent les modules d'éléments mécano-soudés dont je te parlais. Mais il y a une complexité supplémentaire : le traitement de joint entre des profilés.

Les modules Draft et Architecture sont entièrement programmés en Python. Ce langage de programmation est paraît-il assez accessible. Je n'ai aucune expérience, ça fait au moins un an que je veux apprendre mais j'ai d'autres priorités. Ça serait définitivement faisable, surtout que tu pourrais consulter le code du module Arch et t'en inspirer.
rockn wrote:Le seul problème que je vois c'est que je n'arrive pas à travailler dans un plan voulu. Une idée de comment on fait ?
Est-ce que tu veux dire par l'interface graphique ? Ça fait partie des éléments manquants, la création de plans de travail. Il y a un outil Plan dans le module Part (menu Paramétrique > Créer primitives), mais les paramètres restent limités.

Le développement actuel se concentre sur la correction de bogues au module Sketcher qui a énormément évolué cet été. L'objectif est de publier une version finale 0.12 d'ici la fin d'octobre. Ensuite, pour la 0.13, les efforts seront portés vers le Part Design et un nouveau module d'Assemblage. Il me semble que la création de plans devrait aussi être incluse.

Je termine avec ceci : malheureusement, le forum francophone est très peu fréquenté. Il n'y a que moi qui le consulte presque à chaque jour, puis moins régulièrement Yorik (développeur des modules Draft et Arch). Les autres développeurs ne parlent pas français. La discussion serait définitivement plus animée si tu la lançais dans le forum Open Discussion ou encore Developers corner.
galou_breizh
Posts: 436
Joined: Wed Sep 15, 2010 9:38 am

Re: Créer une barre à partir d'une ligne

Post by galou_breizh »

Bonjour,

il y a quelque chose que tu peux essayer, c'est la commande makePipe. Il y a un exemple dans viewtopic.php?f=3&t=1461&p10778.
La macro utilisée et à adapter :

Code: Select all

import Part, FreeCAD, math
from FreeCAD import Base
helix=Part.makeHelix(1,10,3)
circle = Part.makeCircle(0.35,Base.Vector(3,0,0),Base.Vector(0,1,0))
circle = Part.Wire([circle])
pipe = Part.Wire(helix).makePipe(circle)
Part.show(pipe)
Il n'y a pas d'interface graphique.
J'espère que ça aide. Je n'ai pas testé avec un support dont la tangente n'est pas continue. Dis-nous si ça pose problème.

Gaël
User avatar
NormandC
Veteran
Posts: 18589
Joined: Sat Feb 06, 2010 9:52 pm
Location: Québec, Canada

Re: Créer une barre à partir d'une ligne

Post by NormandC »

Salut,

Tiens, tu as repris le code de mon message. Mais bon je l'ai piqué moi-même d'un message de Werner il me semble, et l'ai trafiqué un peu. ;)

L'ennui, c'est que ça ne donne pas un solide, mais une ou des surfaces (selon le type de profil) ouverte(s) aux deux extrémités de la ligne.

FreeCAD utilise le noyau géométrique Open CASCADE, qui fonctionne sur le principe de représentation par les bords (boundary representation, ou B-Rep). Il y a toute une hiérarchie d'éléments pour construire un solide : des points reliés ensemble forment une ligne, plusieurs lignes forment un fil (wire) qui peut quant-à-lui former une face si le fil est fermé. Si on assemble une série de faces contiguës, et que celles-ci forment un volume fermé, alors on on obtient un solide.

Tous les modeleurs de CAO 3D modernes fonctionnent de cette façon, mais ce procédé est transparent pour l'utilisateur. FreeCAD s'en va dans cette direction avec les modules PartDesign et Arch, mais quand on passe par la console Python il faut faire toutes ces opérations manuellement. À mon script il manque donc la création de faces aux extrémités et la jonction avec la face existante (la surface tubulaire en hélice du ressort) pour créer un solide. Chose qui se fera automatiquement quand l'outil de l'interface graphique sera programmé.
galou_breizh
Posts: 436
Joined: Wed Sep 15, 2010 9:38 am

Re: Créer une barre à partir d'une ligne

Post by galou_breizh »

Pour avoir un solide, il faut effectivement extruder une "face" et non un "wire". Est-ce qu'il te manque la commande pour faire une "face" à partir d'un "wire" ou c'est la commande "makePipe" qui ne marche pas avec les "faces" ?

Je viens de tester le "makePipe" avec une "face" et le résultat n'est pas correct.
Obtention:
* création d'une ligne ouverte dans un plan (avec un sketch), appelée Sketch
* création d'un sketch fermé à une extrémité de la ligne ouverte et perpendiculaire à elle
* avec l'atelier Draft, création d'un face par "upgrade", appelée Wire
* ensuite en Python:
>>> w = App.ActiveDocument.Wire.Shape
>>> l = App.ActiveDocument.Sketch.Shape
>>> pipe = l.makePipe(w)
>>> Part.show(pipe)

J'obtiens bien quelque chose (appelé Shape), mais je ne sais pas si c'est un solide. App.ActiveDocument.Shape.Shape.Volume me donne 0. De toute façon, la forme n'est pas correcte car le profil est extrudé parallèle à lui-même est non perpendiculaire au support.

Je joins le fichier FreeCAD avec l'extension à retirer. Je viens d'ailleurs de remarquer que je ne peux plus ouvrir le fichier. J'obtiens "Illegal storage access...". Confirmez-moi si vous pouvez l'ouvrir.
Attachments
makePipe.fcstd.zip
extension .zip à retirer
(15.12 KiB) Downloaded 97 times
User avatar
NormandC
Veteran
Posts: 18589
Joined: Sat Feb 06, 2010 9:52 pm
Location: Québec, Canada

Re: Créer une barre à partir d'une ligne

Post by NormandC »

Salut,

J'ouvre le fichier, mais FreeCAD me fait une erreur de compression du fichier, et rien n'est visible à l'écran.

Par ailleurs, si tu consultes la suite de mon sujet Need help modeling a spring with makePipe and GUI shapes, il y avait un bogue avec l'usage de l'hélice comme trajectoire du makePipe, la section pivotait autour de la trajectoire. Werner a corrigé ça il y a quelques heures dans la révision 4991. Ce qui est intéressant c'est qu'il ajoute la variable "makeSolid" dans le code.

Voir sa réponse dans le rapport de bogue : https://sourceforge.net/apps/mantisbt/f ... php?id=444
User avatar
NormandC
Veteran
Posts: 18589
Joined: Sat Feb 06, 2010 9:52 pm
Location: Québec, Canada

Re: Créer une barre à partir d'une ligne

Post by NormandC »

Génial, la variable makeSolid=1 génère un solide ! :)

À noter par contre que makePipe a été remplacé par makePipeShell. J'ai essayé d'ajouter la variable makeSolid à la commande makePipe, et aucune forme n'est créée, ça n'a pas l'air de marcher.
User avatar
rockn
Veteran
Posts: 1791
Joined: Wed Sep 28, 2011 10:39 am
Location: Toulouse, France
Contact:

Re: Créer une barre à partir d'une ligne

Post by rockn »

Bonjour,

Merci à vous pour les exemples.
J'ai fait ceci déjà :

Code: Select all

#add_beam.py
import FreeCAD, FreeCADGui, Part

def create_beam(b,h):
	b = float(b)
	h = float(h)
	selection = FreeCADGui.Selection.getSelection()
	line = selection[0]
	line = line.Shape
	lg_beam = line.Length
	p1 = line.Vertexes[0]
	p2 = line.Vertexes[1]
	x1=p1.X
	y1=p1.Y
	z1=p1.Z
	x2=p2.X
	y2=p2.Y
	z2=p2.Z 
	# create a face normal of line
	pt_start = FreeCAD.Vector(x1,y1,z1)
	direction = FreeCAD.Vector(x2-x1,y2-y1,z2-z1)
	section = Part.makePlane(h,b,pt_start,direction)
	#Part.show(section)
	# create the beam
	beam = section.extrude(direction)
	Part.show(beam)
	print beam
	print type(beam)
Pour s'en servir :

Code: Select all

import add_beam
Puis sélectionner une ligne et taper en console :

Code: Select all

add_beam.create_beam("la largeur","la hauteur")
et ainsi de suite pour chaque lignes.

Un exmple où j'ai créer les barres avec ce script :
Batiment.FCStd.notreallyzipped.zip
Exemple
(37.08 KiB) Downloaded 128 times
Bon, on se rend compte que ça génère des Part.ToPoShape, ce qui n'est pas un solide. Pourtant je pars d'une surface que j'extrude.

Cette nouvelle variable "makeSolide" semble intéressante.
Vous utilisez quelle version de FreeCAD ? Pour l'instant je suis avec la 0.12 4593 du PPA Devel sur Ubuntu 11.04 64 bits.
Avec le PPA daily j'aurais cette nouvelle variable ?
Formations - Assistance - Développement : https://freecad-france.com
Post Reply