Planeur téléguidé

Forum destiné aux questions et discussions en français
Forum rules
Be nice to others! Read the FreeCAD code of conduct!
User avatar
Stéphane Combet
Posts: 43
Joined: Mon Feb 05, 2018 5:46 pm
Contact:

Re: Planeur téléguidé

Post by Stéphane Combet »

Est-ce qu'on peut régler le niveau (plus ou moins prononcé) de perspective en affichage "mode perspective" ?
User avatar
Stéphane Combet
Posts: 43
Joined: Mon Feb 05, 2018 5:46 pm
Contact:

Re: Planeur téléguidé

Post by Stéphane Combet »

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 ! :D



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
Capture.JPG (24.46 KiB) Viewed 1554 times
TestMoule1.FCStd
(45.08 KiB) Downloaded 58 times
User avatar
Vincent B
Veteran
Posts: 4741
Joined: Sun Apr 05, 2015 9:02 am
Location: La Rochelle, France

Re: Planeur téléguidé

Post by Vincent B »

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.
Attachments
MouleAileGG.FCStd
(162.47 KiB) Downloaded 84 times
Capture.JPG
Capture.JPG (27.17 KiB) Viewed 1547 times
User avatar
Stéphane Combet
Posts: 43
Joined: Mon Feb 05, 2018 5:46 pm
Contact:

Re: Planeur téléguidé

Post by Stéphane Combet »

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.
User avatar
Stéphane Combet
Posts: 43
Joined: Mon Feb 05, 2018 5:46 pm
Contact:

Re: Planeur téléguidé

Post by Stéphane Combet »

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 :P ).

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
IMG_20180516_0831081.jpg (114.8 KiB) Viewed 1525 times
User avatar
Stéphane Combet
Posts: 43
Joined: Mon Feb 05, 2018 5:46 pm
Contact:

Re: Planeur téléguidé

Post by Stéphane Combet »

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...
Attachments
Capture.JPG
Capture.JPG (80.97 KiB) Viewed 1516 times
MouleEmpennageTest.FCStd
(86.24 KiB) Downloaded 57 times
User avatar
Chris_G
Veteran
Posts: 2601
Joined: Tue Dec 31, 2013 4:10 pm
Location: France
Contact:

Re: Planeur téléguidé

Post by Chris_G »

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 :

Code: Select all

polyline = Part.makePolygon(pts_moule)
Le résultat est un Wire ouvert.
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)
J'ai pas testé, mais je pense que ça devrait fonctionner ...
User avatar
Vincent B
Veteran
Posts: 4741
Joined: Sun Apr 05, 2015 9:02 am
Location: La Rochelle, France

Re: Planeur téléguidé

Post by Vincent B »

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.
Ça dépasse largement du cadre du forum. Mais perso voila comment je verrais la chose.
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.
User avatar
Stéphane Combet
Posts: 43
Joined: Mon Feb 05, 2018 5:46 pm
Contact:

Re: Planeur téléguidé

Post by Stéphane Combet »

Merci Chris_G, je m'y atèle. :D

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
User avatar
Stéphane Combet
Posts: 43
Joined: Mon Feb 05, 2018 5:46 pm
Contact:

Re: Planeur téléguidé

Post by Stéphane Combet »

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 :
  • Pour créer la BSpline j'utilise toujours la boucle de Chris_G suivante :

    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)
    
    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.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"
Désolé je me sens vraiment en mode assistanat. Merci pour votre patience...

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)
Et les coordonnées pour les nervures 2 et 3 si besoin pour faire des tentatives de "loft" avec plusieurs nervures :

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
Post Reply