Planeur téléguidé
Forum rules
Be nice to others! Read the FreeCAD code of conduct!
Be nice to others! Read the FreeCAD code of conduct!
- Stéphane Combet
- Posts: 43
- Joined: Mon Feb 05, 2018 5:46 pm
- Contact:
Re: Planeur téléguidé
Est-ce qu'on peut régler le niveau (plus ou moins prononcé) de perspective en affichage "mode perspective" ?
- Stéphane Combet
- Posts: 43
- Joined: Mon Feb 05, 2018 5:46 pm
- Contact:
Re: Planeur téléguidé
Alors, grâce à vos conseils je maîtrise mieux ma conception de shape tout en courbe avec mes coordonnées de profil + vue de dessus.
Je passe maintenant à l'idée du moule, qui est grosso-modo un bloc dans lequel je voudrais soustraire mon Shape.
Dans le fichier joint, j'ai positionné mon empennage de manière à ce qu'il déborde un peu partout du bloc solide. Je m'attendais à pouvoir faire une opération booléenne pour obtenir mon "moule" en solide, mais je n'y arrive pas.
Comment serait-il intelligent que je m'y prenne s'il vous plaît ?... Merci !
OS: Windows 7
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.17.13519 (Git)
Build type: Release
Branch: releases/FreeCAD-0-17
Hash: 1a8b868018f45ea486c0023fdbfeb06febc1fb89
Python version: 2.7.14
Qt version: 4.8.7
Coin version: 4.0.0a
OCC version: 7.2.0
Locale: French/France (fr_FR)
Je passe maintenant à l'idée du moule, qui est grosso-modo un bloc dans lequel je voudrais soustraire mon Shape.
Dans le fichier joint, j'ai positionné mon empennage de manière à ce qu'il déborde un peu partout du bloc solide. Je m'attendais à pouvoir faire une opération booléenne pour obtenir mon "moule" en solide, mais je n'y arrive pas.
Comment serait-il intelligent que je m'y prenne s'il vous plaît ?... Merci !
OS: Windows 7
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.17.13519 (Git)
Build type: Release
Branch: releases/FreeCAD-0-17
Hash: 1a8b868018f45ea486c0023fdbfeb06febc1fb89
Python version: 2.7.14
Qt version: 4.8.7
Coin version: 4.0.0a
OCC version: 7.2.0
Locale: French/France (fr_FR)
- Attachments
-
- Capture.JPG (24.46 KiB) Viewed 1554 times
-
- TestMoule1.FCStd
- (45.08 KiB) Downloaded 58 times
Re: Planeur téléguidé
En principe il faut un objet plein pour faire un moule. Dans ton fichier tu n'as qu'une peau (shell).
Néanmoins, j'ai réussi à en tirer une forme pleine car l'aile est symétrique.
On peut alors facilement en tirer une empreinte avec une soustraction de l'atelier Part.
On peut aussi le faire avec l'atelier PartDesign par soustraction de 2 body.
PS: il semblerait qu'il y a des facettes en bout d'aile.
Néanmoins, j'ai réussi à en tirer une forme pleine car l'aile est symétrique.
On peut alors facilement en tirer une empreinte avec une soustraction de l'atelier Part.
On peut aussi le faire avec l'atelier PartDesign par soustraction de 2 body.
PS: il semblerait qu'il y a des facettes en bout d'aile.
- Attachments
-
- MouleAileGG.FCStd
- (162.47 KiB) Downloaded 84 times
-
- Capture.JPG (27.17 KiB) Viewed 1547 times
- Stéphane Combet
- Posts: 43
- Joined: Mon Feb 05, 2018 5:46 pm
- Contact:
Re: Planeur téléguidé
Super, merci !
Est-ce que je pourrais aussi créer un solide en fermant "à plat" la shell d'origine, si oui quels outils pour faire ça ?
PS bien vu, en effet la dernière nervure, bien qu'elle soit petite, est une nervure à plat comme celle d'emplanture.
Est-ce que je pourrais aussi créer un solide en fermant "à plat" la shell d'origine, si oui quels outils pour faire ça ?
PS bien vu, en effet la dernière nervure, bien qu'elle soit petite, est une nervure à plat comme celle d'emplanture.
- Stéphane Combet
- Posts: 43
- Joined: Mon Feb 05, 2018 5:46 pm
- Contact:
Re: Planeur téléguidé
Bon à ce stade je vais m'interroger sur comment intégrer les formes propres au moule.
En effet il y a la forme idéale de l'aile, et les réalités de la fabrication.
Par exemple sur ce demi-empennage j'ai laissé une marche de 15/10 en bord de fuite pour l'épaisseur des tissus. Comme on moule d'abord extrados et intrados séparément, le bord d'attaque (qui est perpendiculaire au plan de joint) est arasé au cutter donc pile poil sur le plan de joint, mais le bord de fuite où le tissus est presque parallèle au plan de joint doit intégrer l'épaisseur des tissus.
De plus il peut être utile d'intégrer des gorges de dégagement de la résine tout autour de la zone stratifiée. Je ne sais pas encore si je ferai ça.
Enfin, si le plan de joint de mon empennage est bien plan, ce ne sera pas le cas de celui de l'aile (je peux expliquer au besoin ).
Donc, une solution que j'entrevois est de générer, au lieu des simples demi-profils d'empennage, des profils de moule qui ressembleraient à ma pièce jointe.
Pour cela, j'aimerai savoir si, dans le script que m'a donné Chris_G, je peux limiter l'approximation par BSpline à un certain nombre de points seulement de mon Wire ? En effet le reste de ces "profils de moule" seraient des segments bien droits.
Ou bien faut-il partir dans une autre direction, genre prendre le fichier que Glouglou m'a proposé et travailler dessus à la main ? Mais pour l'aile cette méthode ne sera pas possible vu qu'on pourra pas soustraire le volume d'aile à un bloc rectangle vu que le plan de joint ne sera pas exactement plan (mais courbe).
En effet il y a la forme idéale de l'aile, et les réalités de la fabrication.
Par exemple sur ce demi-empennage j'ai laissé une marche de 15/10 en bord de fuite pour l'épaisseur des tissus. Comme on moule d'abord extrados et intrados séparément, le bord d'attaque (qui est perpendiculaire au plan de joint) est arasé au cutter donc pile poil sur le plan de joint, mais le bord de fuite où le tissus est presque parallèle au plan de joint doit intégrer l'épaisseur des tissus.
De plus il peut être utile d'intégrer des gorges de dégagement de la résine tout autour de la zone stratifiée. Je ne sais pas encore si je ferai ça.
Enfin, si le plan de joint de mon empennage est bien plan, ce ne sera pas le cas de celui de l'aile (je peux expliquer au besoin ).
Donc, une solution que j'entrevois est de générer, au lieu des simples demi-profils d'empennage, des profils de moule qui ressembleraient à ma pièce jointe.
Pour cela, j'aimerai savoir si, dans le script que m'a donné Chris_G, je peux limiter l'approximation par BSpline à un certain nombre de points seulement de mon Wire ? En effet le reste de ces "profils de moule" seraient des segments bien droits.
Ou bien faut-il partir dans une autre direction, genre prendre le fichier que Glouglou m'a proposé et travailler dessus à la main ? Mais pour l'aile cette méthode ne sera pas possible vu qu'on pourra pas soustraire le volume d'aile à un bloc rectangle vu que le plan de joint ne sera pas exactement plan (mais courbe).
Code: Select all
pts = [vertex.Point for vertex in w.Vertexes]
bs = Part.BSplineCurve()
bs.approximate(Points=pts, DegMax=5, Tolerance=0.05, Continuity='C3')
curves.append(bs)
- Attachments
-
- IMG_20180516_0831081.jpg (114.8 KiB) Viewed 1525 times
- Stéphane Combet
- Posts: 43
- Joined: Mon Feb 05, 2018 5:46 pm
- Contact:
Re: Planeur téléguidé
En effet, avec mes outils de dimensionnement aero en amont, je suis assez facilement capable de générer ça, que ce soit pour l'aile ou pour l'empennage, intrados ou extrados.
Ce qui me tenterait donc à ce stade c'est de BSpline la partie profil d'aile (la zone corbe de chacun de mes wires), puis de générer le solide par loft par exemple.
Désolé vous avez peut-être l'impression que j'aurais dû poser le problème comme ça depuis le début mais tout ça avance aussi progressivement de mon côté, je découvre le logiciel et l'univers du moulage composite...
Ce qui me tenterait donc à ce stade c'est de BSpline la partie profil d'aile (la zone corbe de chacun de mes wires), puis de générer le solide par loft par exemple.
Désolé vous avez peut-être l'impression que j'aurais dû poser le problème comme ça depuis le début mais tout ça avance aussi progressivement de mon côté, je découvre le logiciel et l'univers du moulage composite...
- Attachments
-
- Capture.JPG (80.97 KiB) Viewed 1516 times
-
- MouleEmpennageTest.FCStd
- (86.24 KiB) Downloaded 57 times
Re: Planeur téléguidé
J'imagine que tu génères toujours tes points avec un script python ?
Dans ce cas, je pense que le plus simple est de créer 2 listes de points :
- les points du profil d'empennage
- les points du moule, en partant du point Bord d'Attaque, jusqu'au point Bord de Fuite.
Tu sais déja comment créer une BSpline sur les points du profil.
Tu peux créer une polyline sur les points du moule comme ceci :
Le résultat est un Wire ouvert.
Il ne reste plus qu'à créer un wire fermé en ajoutant le profil :
J'ai pas testé, mais je pense que ça devrait fonctionner ...
Dans ce cas, je pense que le plus simple est de créer 2 listes de points :
- les points du profil d'empennage
- les points du moule, en partant du point Bord d'Attaque, jusqu'au point Bord de Fuite.
Tu sais déja comment créer une BSpline sur les points du profil.
Tu peux créer une polyline sur les points du moule comme ceci :
Code: Select all
polyline = Part.makePolygon(pts_moule)
Il ne reste plus qu'à créer un wire fermé en ajoutant le profil :
Code: Select all
profil = bspline.toShape() # on crée une arête à partir de la courbe BSpline
edges = polyline.Edges # on récupère les arêtes de polyline
edges.append(profil) # on y ajoute le profil
closed_wire = Part.Wire(Part.__sortEdges__(edges)) # on crée un nouveau wire à partir de cette liste d'arêtes
Part.show(closed_wire)
Re: Planeur téléguidé
Ça dépasse largement du cadre du forum. Mais perso voila comment je verrais la chose.Stéphane Combet wrote: ↑Wed May 16, 2018 5:39 am En effet il y a la forme idéale de l'aile, et les réalités de la fabrication.
Il faudrait connaitre dans quel matière tu compte réaliser le moule.
Je le verrais bien en aluminium usiné. Ensuite il faudra le poncer et polir à la Dremel.Ou alors un plastique assez dur ou une résine.
Pour les bords de fuite, j’essayerais de les faire en résine sans tissu mais chargée de fibre (on appelle ça de la choucroute). Le reste avec deux ou 3 mats fins, ça doit le faire.
Je suppose que tu dois avoir un axe au centre des deux parties pour la rotation.
Comment as tu prévu son positionnement? Pourquoi pas prévoir le moule avec un support où tu briderais l'axe?
Il y a t il une âme en balsa ou mousse? Comment comptes tu coller les 2 pièces? As tu prévu du gelcoat ou peinture?
...
Pour l'aile, un plan de joint en courbe ne pose pas de problème, à mon avis si le moule est usiné à la CNC.
...
On doit pouvoir faire les pièces en une seule fois avec deux demi moule en prévoyant des évents et les pressant.
- Stéphane Combet
- Posts: 43
- Joined: Mon Feb 05, 2018 5:46 pm
- Contact:
Re: Planeur téléguidé
Merci Chris_G, je m'y atèle.
Merci Glouglou, oui les réalités de la fabrication je les découvre mais je ne pose pas mes questions ici. C'est assez documenté comme sujet, voici un exemple assez proche de ce que je vais réaliser : https://sites.google.com/site/pierrickf ... s/europhia
Merci Glouglou, oui les réalités de la fabrication je les découvre mais je ne pose pas mes questions ici. C'est assez documenté comme sujet, voici un exemple assez proche de ce que je vais réaliser : https://sites.google.com/site/pierrickf ... s/europhia
- Stéphane Combet
- Posts: 43
- Joined: Mon Feb 05, 2018 5:46 pm
- Contact:
Re: Planeur téléguidé
Alors, me voici de retour sur ce code Python, avec 3 questions.
J'ai mis bout à bout ce que j'ai appris de code et j'arrive effectivement à générer un wire fermé composé d'un BSpline et d'un Polyline.
Mais mon code est moche et j'ai des problèmes. Voici mes 3 questions :
Mon code bout à bout pour un seul "closed_wire" celui de la nervure 1 :
Et les coordonnées pour les nervures 2 et 3 si besoin pour faire des tentatives de "loft" avec plusieurs nervures :
J'ai mis bout à bout ce que j'ai appris de code et j'arrive effectivement à générer un wire fermé composé d'un BSpline et d'un Polyline.
Mais mon code est moche et j'ai des problèmes. Voici mes 3 questions :
- Pour créer la BSpline j'utilise toujours la boucle de Chris_G suivante :
Dans mon cas comme je connais le nom de l'objet sur lequel je veux travailler je devrais pouvoir faire plus propre (pas une boucle sur tous les objets du document) mais je n'y arrive pas. Du genre
Code: Select all
doc = App.ActiveDocument curves = list() for o in doc.Objects: if 'EmpennageNervure' in o.Label: w = o.Shape.Wires[0].copy() # --- corrige les profils ( ordre des vertexes ) w.fixWire() o.Shape = w # --- pts = [vertex.Point for vertex in w.Vertexes] bs = Part.BSplineCurve() bs.approximate(Points=pts, DegMax=5, Tolerance=0.05, Continuity='C3') curves.append(bs)
Code: Select all
doc.Objects("EmpennageNervure1").Shape.Wires[0].copy()
- Je dois pouvoir nommer mon "closed_wire" quand je combine BSpline + Polyline mais je n'ai pas réussi avec des tentatives de code du genre
Code: Select all
closed_wire = Part.Wire(Part.__sortEdges__(edges)) mon_objet = FreeCAD.ActiveDocument.addObject("Part::Feature","EmpennageNervureEtMoule1") mon_objet.Shape = closed_wire
- Enfin je n'arrive pas à générer de loft avec mes "closed_wire"
Mon code bout à bout pour un seul "closed_wire" celui de la nervure 1 :
Code: Select all
import FreeCAD
import Part
coord_list = [ (0,0,0),
(0.0598,0,0.371469868801423),
(0.1521,0,0.728485657104737),
(0.3913,0,1.12741827885257),
(0.7904,0,1.62752946408717),
(1.4885,0,2.25339114965533),
(2.6468,0,3.0136757838559),
(4.2744,0,3.78841449855459),
(6.175,0,4.44896597731821),
(8.2004,0,4.97798532354903),
(10.2882,0,5.38414498554592),
(13.494,0,5.83222148098732),
(16.7466,0,6.13864798754725),
(20.0252,0,6.33811429842117),
(23.322,0,6.45230153435624),
(26.624,0,6.5),
(29.9351,0,6.49566377585057),
(33.2488,0,6.44651990215699),
(37.674,0,6.32366021792306),
(42.1031,0,6.15021125194574),
(46.5335,0,5.93340004447409),
(55.393,0,5.40438069824327),
(59.8143,0,5.10807204803202),
(64.2447,0,4.79441850122304),
(73.086,0,4.13386702245942),
(77.5177,0,3.79419613075384),
(81.9572,0,3.4472981987992),
(89.7117,0,2.84456304202802),
(93.0241,0,2.58872581721147),
(96.3391,0,2.33722481654436),
(99.6606,0,2.08572381587725),
(102.9795,0,1.84144985545919),
(106.3023,0,1.60006671114076),
(109.6173,0,1.36301979097176),
(112.9388,0,1.131754503002),
(116.2642,0,0.918912847231488),
(119.5948,0,0.736853047809651),
(122.9228,0,0.561994288636869),
(126.2391,0,0.401472609962197),
(130,0,0.15) ]
points = [FreeCAD.Vector(coord) for coord in coord_list]
polygon = Part.makePolygon(points)
mon_objet = FreeCAD.ActiveDocument.addObject("Part::Feature","EmpennageNervure1")
mon_objet.Shape = polygon
coord_list_moule = [ (0,0,0),
(-10,0,0),
(-10,0,5),
(-20,0,5),
(-20,0,0),
(-30,0,0),
(-30,0,30),
(160,0,30),
(160,0,0),
(150,0,0),
(150,0,0.15),
(130,0,0.15) ]
points = [FreeCAD.Vector(coord) for coord in coord_list_moule]
polyline = Part.makePolygon(points)
mon_objet = FreeCAD.ActiveDocument.addObject("Part::Feature","EmpennageMoule1")
mon_objet.Shape = polyline
doc = App.ActiveDocument
curves = list()
for o in doc.Objects:
if 'EmpennageNervure' in o.Label:
w = o.Shape.Wires[0].copy()
# --- corrige les profils ( ordre des vertexes )
w.fixWire()
o.Shape = w
# ---
pts = [vertex.Point for vertex in w.Vertexes]
bs = Part.BSplineCurve()
bs.approximate(Points=pts, DegMax=5, Tolerance=0.05, Continuity='C3')
curves.append(bs)
profil = bs.toShape()
edges = polyline.Edges
edges.append(profil)
closed_wire = Part.Wire(Part.__sortEdges__(edges))
Part.show(closed_wire)
Code: Select all
#EmpennageNervure2
coord_list = [ (1.82052010259084,60,0),
(1.87932124992822,60,0.365265125197183),
(1.97007954255766,60,0.716317599608484),
(2.2052841319072,60,1.10858676129884),
(2.59771787609366,60,1.60034447849038),
(3.28415735696705,60,2.2157522575191),
(4.42311001517596,60,2.96333768885653),
(6.02352385140218,60,3.72513577097984),
(7.89237770808168,60,4.37465391189467),
(9.88394700268268,60,4.89483693065798),
(11.9368740162444,60,5.29421241774128),
(15.0891268278529,60,5.73480459210364),
(18.287397928682,60,6.03611278876435),
(21.5112347457447,60,6.23224736960953),
(24.752967564171,60,6.344527310818),
(27.999813525844,60,6.39142905841142),
(31.2556074881988,60,6.38716526317565),
(34.5139580221769,60,6.33884225050365),
(38.8652429251434,60,6.21803471882365),
(43.2203626855449,60,6.04748290939306),
(47.5767607317582,60,5.83429314760482),
(56.2882785383729,60,5.31411012884151),
(60.6357285839044,60,5.02275078773092),
(64.9921266301176,60,4.71433626567727),
(73.6857484353688,60,4.06481812476243),
(78.0434247673937,60,3.73082083129419),
(82.4087708142887,60,3.38971721243301),
(90.0337456809735,60,2.7970496746617),
(93.29081792914,60,2.54548575575158),
(96.5504467489298,60,2.29818563207722),
(99.816466997778,60,2.05088550840286),
(103.079930675003,60,1.81069171012145),
(106.347229209663,60,1.57334044199721),
(109.606858029453,60,1.34025296910873),
(112.872878278301,60,1.11285055653461),
(116.142733384584,60,0.906069525412491),
(119.417701634114,60,0.72705071119814),
(122.690113312021,60,0.555112656660496),
(125.951020417622,60,0.397272207185684),
(129.649101270819,60,0.15) ]
#EmpennageMoule2
coord_list_moule = [ (1.82052010259084,60,0),
(-8.17947989740916,60,0),
(-8.17947989740916,60,5),
(-18.1794798974092,60,5),
(-18.1794798974092,60,0),
(-30,60,0),
(-30,60,30),
(160,60,30),
(160,60,0),
(149.649101270819,60,0),
(149.649101270819,60,0.15),
(129.649101270819,60,0.15) ]
Code: Select all
#EmpennageNervure3
coord_list = [ (4.57988298417009,120,0),
(4.63692241178326,120,0.354321550032992),
(4.72496152831664,120,0.694856269325401),
(4.95311923876932,120,1.0753727977655),
(5.3337954187094,120,1.55239714138969),
(5.99966873671533,120,2.14936691245695),
(7.10449764983132,120,2.87455420941163),
(8.65696207095502,120,3.6135283371069),
(10.4698238790084,120,4.24358650195156),
(12.4017244925154,120,4.74818450705691),
(14.3931445087491,120,5.1355944508673),
(17.4509538238378,120,5.56298620382538),
(20.5534026909716,120,5.85526701552575),
(23.6806513092416,120,6.0455252797458),
(26.8252597533068,120,6.15444124259641),
(29.9748281475993,120,6.19993778404034),
(33.1330764547895,120,6.19580173481816),
(36.2938047370932,120,6.14892651030018),
(40.5147223804679,120,6.03173844900522),
(44.739359986513,120,5.86629648011822),
(48.9652375801149,120,5.65949401900947),
(57.4157527797618,120,5.15489601390412),
(61.6329504604661,120,4.87226598372216),
(65.858828054068,120,4.5730917566515),
(74.2919834279196,120,3.94303359180684),
(78.5191010090783,120,3.61904306940313),
(82.7536585155779,120,3.28815913162913),
(90.150184291938,120,2.7132482897468),
(93.309672586685,120,2.46922138563848),
(96.4716408565455,120,2.22933053075233),
(99.6398090641901,120,1.98943967586618),
(102.805497296721,120,1.75644223635032),
(105.974905491923,120,1.52620216298258),
(109.136873761783,120,1.30009813883701),
(112.305041969428,120,1.07950884698768),
(115.476930139743,120,0.883417202182236),
(118.653778260285,120,0.709761905352967),
(121.828146405714,120,0.542975224142853),
(124.991354663131,120,0.38986377479321),
(128.578638664977,120,0.15) ]
#EmpennageMoule3
coord_list_moule = [ (4.57988298417009,120,0),
(-5.42011701582991,120,0),
(-5.42011701582991,120,5),
(-15.4201170158299,120,5),
(-15.4201170158299,120,0),
(-30,120,0),
(-30,120,30),
(160,120,30),
(160,120,0),
(148.578638664977,120,0),
(148.578638664977,120,0.15),
(128.578638664977,120,0.15) ]
- Attachments
-
- BSpline_AND_Polyline-Nervure1.FCStd
- (7.99 KiB) Downloaded 57 times