Quetzal | |
coccinelle | 14-Feb-2011/11:41+1:00 |
Le Quetzal est un oiseau sacré d'Amérique centrale et d'Amérique du sud. Le Quetzal, c'est aussi un modèle réduit que j'ai créé en 2008 : http://lesgpr.free.fr/construire/lecteur-construit/quetzal/quetzal.htm Mais depuis mi-janvier, j'ai entamé la programmation d'un nouveau Quetzal, en REBOL naturellement. Ce n'est encore qu'une ébauche, mais pour vous faire déjà une idée de la chose, voici le lien pour downloader le paquet cadeau : http://www.megaupload.com/?d=FI7XDE3B L'idée générale, c'est un programme pour dessiner des planeurs et générer leur modèle pour le simulateur de vol CRRCSim. Cela intègre la soufflerie numérique xFoil qui permet d'étudier les profils des ailes. xFoil ne tourne en standard que sur windows alors si c'est votre cas, décompressez le fichier sur votre machine et lancez le fichier start.cmd Vous pourrez ouvrir l'un des 3 projets de test ou ouvrir des profils d'aile (j'en ai mis quelques-uns dans le répertoire "airfoil") et dans ce cas, vous verrez xFoil s'annimer, c'est assez sympa. Pour ceux qui ne sont pas sous Windows, vous devriez quand même pouvoir ouvrir les projets mais vous ne pourrez pas faire fonctionner xFoil. Pour ceux qui s'y connaissent un peu en matière de profil et de polaire, ils s'y retrouveront assez facilement, pour les autres, ce sera amusant de voir ce que l'on peut faire en moins d'un mois avec REBOL. NB. L'application est multilangue anglais / français. | |
Laurent | 15-Feb-2011/14:30:14+1:00 |
Cool | |
Didec | 15-Feb-2011/15:42:13+1:00 |
Ouais, bon début. J'adore l'idée qu'une coccinelle fabrique des planeurs | |
coccinelle | 15-Feb-2011/17:32:43+1:00 |
Un ami a essayé la chose avec Wine sous Linux et cela fonctionne, y compris le calcul des polaires avec xFoil. Comme tu dis didec, c'est un début. Là depuis 2 jours, je me bat avec les slider et les list pour rendre la liste des profils scrollable. A ce sujet, j'ai essayé les "iterated face" mais sans grand succès car c'est très lent, mieux vaut semble-t-il composer ses listes soit-même et car les "iterated face" font des appels incontrôlés à la fonction "pane". Est-ce aussi votre expérience ? | |
Didec | 16-Feb-2011/10:37:47+1:00 |
J'ai toujours utilisé les "list" avec un block "supply" contenant le code pour la remplir. J'ai jamais constaté de ralentissement, mais en même temps je n'ai en général que quelques dizaines d'éléments dedans. Je ne sais pas ce que ça donne avec plusieurs centaines. Pour illustrer, voici le code VID de la liste des messages dans mon "delete-email", avec le code du scroller associé: ; e-mails list and scroller f-em: list water to-pair reduce [696 + acnt-size 19 * cfg/nb-line + 4] with [picked: copy [] cnt: 0] [ space 1x0 across text acnt-size ; account name text 320 [ ; subject if none? face/user-data [exit] face/user-data/selected?: not face/user-data/selected? ] [display-header face/user-data] font [colors: [0.0.0 160.160.200]] ; from text 170 para [origin: 20x2] effect [draw [image 2x2 img-no 255.0.255]] with [data: false] [ face/font/color: first face/font/colors change-sender-status/blacklist/refresh-all face/user-data ] [ face/font/color: first face/font/colors change-sender-status/whitelist/refresh-all face/user-data ] ; from text 80 ; date text 60 ; time text 56 right ; size ] supply [ count: count + f-em/cnt if count > length? b-msg [face/show?: false exit] face/show?: true cur-msg: b-msg/:count if face/style = 'text [face/text: select cur-msg pick [account subject from date time size] index] face/color: pick cfg/colors-norma (count // 2 = 0) ;even row color if index = 2 [ face/user-data: cur-msg if cur-msg/selected? [face/color: pick cfg/colors-selec (count // 2 = 0)] ] if index = 3 [ face/user-data: cur-msg face/effect/draw/3: select image-list cur-msg/state ] face/font/colors/2: face/color - 70.70.70 ] space 2x4 f-scroll: scroller [ val: to-integer (length? b-msg) - cfg/nb-line * value if all [val >= 0 f-em/cnt <> val] [f-em/cnt: val show f-em] ] to-pair reduce [16 f-em/size/y] with [ redrag-me: does [ self/data: 0 self/step: 1 / max 1 ((length? b-msg) - cfg/nb-line) self/redrag min 1 (cfg/nb-line / max 1 length? b-msg) ] ] return Dans ce code, "b-msg" est la source de données : un block! d'object!, chaque object! étant un email. 'count est l'indice de la première ligne affichée. 'index est l'indice de la colonne à remplir. | |
coccinelle | 16-Feb-2011/22:08:12+1:00 |
Merci Didier, J'avais pris la chose par le mauvais bout mais avec ton code, tu m'as mis sur la bonne voie. Et cerise sur la gâteau, la consommation mémoire reste très stable contrairement à ce que j'avais fait qui sollicitait beaucoup le garbage collector. Ca donne le code ci-dessous. La seule différence, c'est que la fonction supply doit retourner "none" (ou false) en fin de liste, autre chose autrement. Les sliders sont gérés automatiquement et le truc peut-être réinitialisé avec la méthode "reset" et redimensionné avec "resize". stylize/master [ scroll-list: image 240.240.240 with [ feel: none subface: none subfunc: none edge: [size: 2x2 color: 128.128.128 effect: 'ibevel] size: -1x-1 append init [ ;set the new face color to the self face color pane: layout/styles/tight/parent [ across origin 0x0 space 0x0 slist: image with [ edge: none feel: none color: none ] vsld: scroller 16x100 [ list-offset/y: negate value * vsld-size show slist ] return hsld: scroller 100x16 [ list-offset/x: negate value * hsld-size show slist ] ] copy styles compose [color: (color)] ;store the edge-size pane/state: edge-size? self if size/x < 0 [size/x: pane/size/x + pane/state/x] if size/y < 0 [size/y: pane/size/y + pane/state/y] ;use the new color color: pane/color pane: pane/pane subface: layout/parent/tight/styles second :action blank-face copy self/styles slist/pane: func [face id /local count wrk need-flag][ if pair? id [return to-integer id/y - list-offset/y / subface/size/y + 1] subface/offset/x: list-offset/x subface/offset/y: id - 1 * subface/size/y + list-offset/y subface/old-offset: subface/offset if subface/offset/y > size/y [ if list-changed [list-changed: false resize none] return none ] count: 0 subface/show?: true foreach item subface/pane [ if object? item [ unless subfunc item id count: count + 1 [ subface/show?: false break ] ] ] either subface/show? [ wrk: subface/offset + (1x1 * subface/size) - list-offset if list-size/x < wrk/x [list-size/x: wrk/x list-changed: true] if list-size/y < wrk/y [list-size/y: wrk/y list-changed: true] ][ wrk: subface/offset + (1x0 * subface/size) - list-offset if list-size/x > wrk/x [list-size/x: wrk/x list-changed: true] if list-size/y > wrk/y [list-size/y: wrk/y list-changed: true] ] subface ] reset ] set-it: func [face stuff index count /item][ item: stuff/:count/:index either file? item [face/image: load-image item][face/text: any [item ""]] ] words: [ supply [ new/subfunc: func [face count index] second args next args ] map [ set-it: func [face stuff index count /map item] compose/deep [ map: [(second args)] item: stuff/:count/:index all ['text = map/:index none? item item: ""] either all ['image = map/:index any [file? item url? item]][face/image: load-image item][ all [map/:index set in face map/:index item] ] ] next args ] data [ new/subfunc: func [face count index /local stuff] compose/deep [ stuff: [(second args)] either count > length? stuff [ face/text: "" face/image: none return none ][ set-it face stuff index count return face ] ] next args ] ] list-size: 1x1 list-offset: 0x0 list-changed: false slist: none vsld: vsld-size: none hsld: hsld-size: none reset: does [ list-size: 1x1 list-offset: 0x0 resize none ] resize: func [new [pair! integer! none!] /x /y /local wrk][ either any [x y] [ if x [size/x: new] if y [size/y: new] ][ size: to-pair any [new size] ] slist/size: size vsld/offset: size - vsld/size * 1x0 hsld/offset: size - hsld/size * 0x1 if hsld/show?: list-size/x > slist/size/x [slist/size/y: size/y - hsld/size/y] if vsld/show?: list-size/y > slist/size/y [slist/size/x: size/x - vsld/size/x] if hsld/show?: list-size/x > slist/size/x [slist/size/y: size/y - hsld/size/y] if slist/size = size [ list-offset: 0x0 if self/show? [show self] return ] unless positive? hsld-size: list-size/x - slist/size/x [hsld-size: slist/size/x] hsld/step: 0.05 hsld/page: min 1 slist/size/x / hsld-size hsld/ratio: slist/size/x / list-size/x hsld/resize/x slist/size/x list-offset/x: either hsld/show? [negate hsld/data * hsld-size][0] wrk: subface/size/y * to-integer (slist/size/y / subface/size/y) unless positive? vsld-size: list-size/y - wrk [vsld-size: wrk] vsld/step: subface/size/y / vsld-size vsld/page: min 1 wrk / vsld-size vsld/ratio: wrk / list-size/y vsld/resize/y slist/size/y list-offset/y: either vsld/show? [negate vsld/data * vsld-size][0] if self/show? [show self] ] ] ] | |
coccinelle | 21-Feb-2011/17:24:26+1:00 |
Petit update du Quetzal : http://www.megaupload.com/?d=PSQ8JT60 J'ai repensé le packaging pour que cela puisse tourner à peu prêt dans le plugin (fichier quetzal.html) et ça fonctionne assez bien dans IE et Firefox. Sinon, quelques améliorations fonctionnelles et cosmétiques. Voilà, voilà, Marco. | |
coccinelle | 11-Mar-2011/10:32:24+1:00 |
Nouvel update du Quetzal : http://www.megaupload.com/?d=A4N7QNHP Principale nouveauté, on peut maintenant créer la voilure des machines, aile, stab, dérive, ou autre selon les besoins. J'ai aussi amélioré l'intégration avec le plugin, ça marche bien dans IE, c'est un peu moins bien dans Firefox. Sinon, plusieurs améliorations fonctionnelles et consmétiques, entre autre, j'ai commencé à ajouter la possibilité de choisir ses couleurs préférées. J'ai aussi inclus les sources. Prochaine étape, le fuselage, ça, ça va pas être facile. Voilà, voilà, Marco. | |
Didec | 11-Mar-2011/13:40:05+1:00 |
Sympa, ça commence à être un ptit programme intéressant pour les modélistes. | |
coccinelle | 11-Mar-2011/15:50:24+1:00 |
Merci Didier, j'espère arriver à faire un truc sympa. Les modélistes, on passe souvent pour des grands enfants, et c'est vrai heureusement, mais quand même, les technologies mises en oeuvre sont de très haut niveau. Pour info, le record de vitesse en planeur télécommandé, (je dis bien en planeur sans moteur ni réacteur) est de 756 km/h !!!... | |
coccinelle | 31-Mar-2011/8:37:44+2:00 |
Voici un petit update du Quetzal où j'ai un premier jet de l'affichage en 3d du planeur. C'est encore très partiel car cela n'affiche que la demi-voilure de l'engin mais cela montre déjà que la 3d minimaliste que j'ai développé va faire l'affaire. C'est dans le plugin à cette adresse : http://quetzal.homepage.bluewin.ch/ Sinon voici le lien sur le script (soit faire un do dans la console ou un goto dans le desktop) : http://quetzal.homepage.bluewin.ch/quetzal.r Et les liens sur 2 projets de démo (il suffit de copier ces liens dans la popup d'ouverture des projets): http://quetzal.homepage.bluewin.ch/quetzal.qpr http://quetzal.homepage.bluewin.ch/asw-19.qpr Y'a encore bien du boulot pour faire marcher le truc mais ça fait plaisir de voir un début de résultat. | |
Didec | 31-Mar-2011/9:48:10+2:00 |
Prometteur. Encore bravo. | |
none | 31-Mar-2011/22:09:26+2:00 |
Merci Didier, Le plus drôle, c'est que ce n'est pas tout de développer un 3d minimaliste, ce qu'il faut aussi, c'est apprendre à l'utiliser. J'ai fait une mise à jour, toujours avec un affichage du demi-planeur mais avec le coloriage des surfaces. C'est encore plein de trait partout mais ça m'a permis de voir que je générais bien les surfaces, c'était pas si facile à mettre au point. Je suis content des performances car le quetzal, c'est quand même 378 points et 363 surfaces, ce n'est pas énorme mais c'est déjà pas mal et c'est une voilure déjà complexe. Les projets ont aussi été mis à jour alors n'oubliez pas de les ré-ouvrir. PS. Pour les couleurs, je les ferai paramétrables, pour l'instant, la priorité, c'est de mettre au point cet affichage. | |
coccinelle | 1-Apr-2011/11:11:49+2:00 |
Je ne sais pas pourquoi mais parfois, les posts que je crée le sont sous l'utilisateur "none". | |
coccinelle | 1-Apr-2011/22:16:31+2:00 |
Nouvelle version avec l'affichage de la voilure complête, là, ça commence vraiment à avoir de la gueule. | |
coccinelle | 3-Apr-2011/17:27:38+2:00 |
Une nouvelle mise à jour est en ligne toujours à la même adresse. Maintenant, on peut faire tourner le planeur en 3d avec la souris, il suffit de la bouger sur l'image avec un bouton enfoncé. J'ai eu pas mal de peine à faire la mise au point. Au début, j'avais le rafraichissement de l'image qui prenait beaucoup de retard sur le mouvement de la souris. Maintenant, c'est un peu saccadé avec les images complexes mais il n'y a presque plus de retard et ce sera bien suffisant pour ce projet. | |
coccinelle | 6-Apr-2011/13:04:35+2:00 |
J'ai encore fait une petite mise à jour avec principalement, une option dans le menu pour charger très facilement l'une des deux démos, histoire de vous simplifier la vie. N'hésitez pas à regarder l'affichage 3d du planeur, même si c'est un 3d minimaliste, cela a quand même de la gueule. C'est toujours au même endroit : http://quetzal.homepage.bluewin.ch/ | |
coccinelle | 8-Apr-2011/20:04:22+2:00 |
Nouvel update avec l'install automatic du plugin sous Mozzila/Firefox | |
laurent | 10-Apr-2011/21:06:07+2:00 |
C'est vrai que ça a de la gueule! Ca pourrait même être utilisé pour faire de la réclame pour Rebol. Essaye de contacter Carl (si il donne signe de vie), on ne sait jamais. | |
coccinelle | 11-Apr-2011/12:37:30+2:00 |
Bof, franchement, je ne suis pas motivé. | |
shadwolf | 11-Apr-2011/21:39:12+2:00 |
bravo coccinelle belle procedure d'intallation automatique. Etant sous linux je ne peux pas dire a quoi ca ressemble mais la procédure d'install marche bien apparement sur firefox. Cocci: bof, franchement, je suis pas motivé A defaut décrire un baffouille a Carl qui en aura rien a battre puis je suggere une toute petite howto doc sur l'activation de l'install auto du rebplug pour nos nav préférés que tu publierait sur le wiki rebol-france.info ? | |
coccinelle | 12-Apr-2011/11:46:18+2:00 |
Salut Shad, Si tu veux voir la gueule que cela a même sous Linux, tu fais un simple do http://quetzal.homepage.bluewin.ch/quetzal.r dans View. Ensuite, tu a une options "demos" dans la barre de menu et ça te donnera une bonne idée de la chose. La seule chose que tu ne pourras pas faire, c'est le passage des profils d'aile dans la soufflerie numérique xFoil. Marco. | |
olivier | 13-Apr-2011/11:20:42+2:00 |
Je n'avais encore eu l'occasion de tester cette application. Elle est absolument géniale. Superbe réalisation ! Olivier www.auverlot.fr | |
coccinelle | 13-Apr-2011/14:47:07+2:00 |
Salut Olivier, Merci mais ce n'est de loin pas fini, le plus dur est devant moi. Tu y es aussi pour quelque chose car si tu n'avais pas écrit un article sur Rebol dans je ne sais plus quelle revue, je ne pense pas que j'aurais fait la rencontre de ce langage de programmation. Là je bosse sur les fuselages, c'est moins simple que ce que j'ai fait jusqu'à présent. Je dis les fuselages car ça permettra de modéliser par exemple les réacteurs ou les nacelles des moteurs pour des avions qui en ont plusieurs. Ensuite, il aura les gouvernes à modéliser, ça parait facile mais ça ne l'est pas tant que ça si l'on veut rester simple à l'usage. Puis il faudra faire la saisie des différentes masses de l'engin qui sont nécessaires pour le calcul des paramètres de vol pour le simulateur. Et aussi, car je crois que je vais céder à la tentation, la saisie des moteurs pour les engins motorisés. J'allais oublier aussi le son car on peut fournir des fichier .wav pour associer un son à la machine dans le simulateur. Et finalement, il faudra faire l'interface vers AVL qui est est un logiciel qui calcul les paramètres de vol et la génération des fichiers nécessaires pour le simulateur CRRCSim, soit un fichiers .ac (ac3d) pour le graphisme, un fichier .xml pour les paramètres de vol et les fichiers son s'il y en a. Tu vois, encore bien du boulot devant moi mais c'est sympa à faire. A bientôt, Marco. | |
shadwolf | 13-Apr-2011/21:25:19+2:00 |
voila cocci l´a dit tout est de la faute du magazine Login | |
olivier | 14-Apr-2011/11:12:43+2:00 |
désolé | |
coccinelle | 14-Apr-2011/21:28:02+2:00 |
Tu peux l'être Olivier, d'autant plus que ce No je l'ai encore chez moi avec le CD dedans, et que ça prend de la place sur mes étagères Bon, c'est un collector alors je veux bien faire un effort et le garder encore une cinquantaine d'année | |
Login required to Post. |