Quetzal
coccinelle14-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.
Laurent15-Feb-2011/14:30:14+1:00
Cool
Didec15-Feb-2011/15:42:13+1:00
Ouais, bon début.

J'adore l'idée qu'une coccinelle fabrique des planeurs
coccinelle15-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 ?
Didec16-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.
coccinelle16-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]
        ]
    ]
]
coccinelle21-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.
coccinelle11-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.
Didec11-Mar-2011/13:40:05+1:00
Sympa, ça commence à être un ptit programme intéressant pour les modélistes.
coccinelle11-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 !!!...
coccinelle31-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.
Didec31-Mar-2011/9:48:10+2:00
Prometteur. Encore bravo.
none31-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.
coccinelle1-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".
coccinelle1-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.
coccinelle3-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.
coccinelle6-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/
coccinelle8-Apr-2011/20:04:22+2:00
Nouvel update avec l'install automatic du plugin sous Mozzila/Firefox
laurent10-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.
coccinelle11-Apr-2011/12:37:30+2:00
Bof, franchement, je ne suis pas motivé.
shadwolf11-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 ?
coccinelle12-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.
olivier13-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
coccinelle13-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.
shadwolf13-Apr-2011/21:25:19+2:00
voila cocci l´a dit tout est de la faute du magazine Login
olivier14-Apr-2011/11:12:43+2:00
désolé
coccinelle14-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.


Powered by RebelBB and REBOL 2.7.8.4.2