Google+
3DVF Network :
ico_magazine
Magazine
ico_boutique
Boutique
ico_cgjobs
Portail Emploi
ico_upload
Hébergement d'image
ico_progiss
Progiss
Login
space
space

Accueil / Magazine / Actualité Quotidienne / Technologies / Ressources WebGL par Patrick Cozzi

 

Ressources WebGL par Patrick Cozzi

Publiée le 09 août 2012 par shadows44 (3850 lectures)
space

A découvrir chez Real-Time Rendering, une collection de ressources WebGL recensées par Patrick Cozzi : livres, présentations, articles fivers, arguments pour convaincre managers et leads d'utiliser WebGL pour un projet, ou encore quelques outils.

WebGL

space
space

Les derniers commentaires (17)

#1
Salut tmaes non tu ne peux pas facilement. La raison est simple. Maxscript peut tout à fait ouvrir un fichier en lecture ET écriture mais il a une manière un peu particulière d'écrire dans les fichiers. C'est à dire qu'il remplace les caractères qu'il trouve. Par exemple si je veux ecrire 123456 dans un fichier qui contient abcdefgh je vais obtenir 123456gh. Cela veut dire que tu te retrouves avec du junk code : le gh. Alors tu me diras que tu peux écrire une sub-routine qui va réparer le code en se plaçant après le 6 et écrire abcdefgh. Mais dans ce cas là il faudra aussi que tu t'occupes de ce qu'il y avait APRES le h dans le fichier original. En fait tout le fichier xml se retrouve décalé de 123456 = 6 caractères. Et ca casse les couilles. La seule manière de faire est de stocker l'ensemble du fichier dans un réseau colossal, de déterminer la position et le nombre des caractères que tu souhaites supprimer, de les virer du réseau et d'insérer tes caractères. Reste ensuite a copier ce réseau élément par élément dans un fichier texte. Ce que je veux dire c'est que tu dois reconstruire tout le fichier sans pouvoir simplement te placer au niveau de la balise, dégager le false et mettre un true à la place parce qu'ils n'ont pas le même nombre de caractères. Je vais potasser le truc et je t'en dis plus ++ petit edit : note qu'il existe des applications simples et gratuites qui te permettent de retrouver rapidement une balise et de l'éditer. Notepad ++ entre autre...
 
#2
oké je vois... il me semblait bien par les petites recherches que j'avais faites que cette partie du maxscript était plutôt opaque... pourtant c'est des routines banales pour un langage de prog digne de ce nom (je dis pas ça pour te mettre au défi c'est juste une remarque générale)... edit pour dire merci!
 
#3
non non mais tu as raison c'est banal. Le problème vient du fait qu'il n'y a aucune méthode pour supprimer un caractère. Par exemple passer de 123456 à 12346 en ayant viré le 5 et "rapproché" le reste du code. Cette fonction complètement banale existe avec la classe String (les chaines de caractères). C'est la fonction SubString. Le truc c'est que lorsque tu charges le xml dans la mémoire maxscript avec la fonction "OpenFile MonFichierXML". Celle-ci renvoie ce qu'on appelle un FileStream. Or les manipulations sur ces FileStream sont davantage prévues pour la lecture que pour l'écriture. La fonction Substring n'existe pas pour eux et pourtant elle suffirait à régler tous les soucis. Ce que j'essaie de faire actuellement c'est de voir s'il est possible de découper le FileStream en StringStream (c'est une séquence de string). Localliser le StringStream à éditer, le convertir en une chaine (un string donc) et là je serai libre d'utiliser les méthodes telles que SubString et tout le reste. Après il me faudra réinjecter cette chaine en tant que flux de chaines (stringstream) dans le FileStream. Enfin je me comprends c'est le principal :p j'ai toujours été très a l'aise dans la manipulation des string bien qu'il m'arrive encore d'en déchirer quelques uns :D Je te tiendrai au courant mais il me faut un peu de temps. La méthodologie est simple si le fichier xml ne comporte aucune erreur, mais dans le cas contraire le code que j'ai fait ne saurait ni les détecter ni comment se comporter. En clair il crash si tu lui balances un mp3 ou un jpg huhu :pt1cable: :bounce: ++
 
#4
ok je tiens le bon bout. Il se trouve qu'il existe un controle activeX pour parser du xml. C'est un composant pour windows or maxscript a la possibilité d'invoquer des controles AX. La treeview est l'exemple le plus connu mais il y a aussi les excel charts, windows media player, iexplorer et bien plus. Les quelques tests que j'ai fait répondent bien. Et là il y a vraiment tout ce qu'il faut : detection des erreurs dans les balises, calcul du nombre de balises, affichage du code, edition, recherche et remplacement etc etc Je vais potasser tout ca demain soir et je te tiens au courant. L'interet est donc que tu n'auras pas a écrire les fonctions, en revanche il faut encore comprendre comment elles fonctionnes :) :sol: ++
 
#5
jusque là j'avoue ne comprendre qu'à moitié, je ne me suis jamais servi d'active X jusque là, mais si j'ai compris une partie de maxscript je dois bien être cap de comprendre un bout d'AX... merci beaucoup! en tout cas...
 
#6
Ola Voila en fait c'est presque bon, j'ai préparé un script, avec son interface, son activeX et le "parser xml". Quoiqu'il en soit il te faut le controle activeX ici : http://www.chilkatsoft.com/download/XmlActiveX.msi Quand tu l'installes il te rajoute deux dll. Sa documentation est ici http://www.chilkatsoft.com/refdoc/xChilkatXmlRef.html Les methodes les plus pertinentes sont: SearchForTag() qui recherche une balise SearchForContent() qui recherche le contenu d'une balise et searchForAttribute() qui recherche un attribut de balise. Et puis tu verras, il y a plein d'autres methodes interessantes pour énumérer le nombre d'enfants (car les balises sont imbriquées en xml), pour naviguer entre ces enfants, remplacer des valeurs etc etc. Dans maxscript tu invoques le controle activeX en le placant dans un rollout (a la maniere d'un bouton) comme ceci [cpp]ActiveXControl MonActiveX "ChilkatXml.ChilkatXml.1" Visible:False[/cpp] ici j'ai choisi de l'appeler MonActiveX. C'est avec ce nom que tu y fais référence plus tard dans le code tel que MonActiveX.Version ou MonActiveX.NumChildren Mais ne te casse pas la tete a faire un script, j'ai presque fini le mien. Je t'ai fait le noyau et toute l'interface. Je te laisserai le soin de déclarer la macro (pour faire ton bouton dans l'iu) et de faire les errors check (genre vérifier que l'utilisateur a bien rentré une valeur avant que la fonction "apply" ne s'execute. En meme temps si c'est toi et toi seul qui t'en sers, tu n'as meme pas besoin de réaliser ce genre de fonction. Mais bon il vaudra mieux le faire en cas de faute de frappe ou d'inattention. je t'en dis plus demain, j'ai eu une journée à 2 balles :) ++
 
#7
Ça a l'air très chouette tout ça, je vais le tester un peu demain... je crois que je comprends la philosophie du truc... Ok j'attends ton dégrossissage, j'affinerai et je mettrai le code final ici si ça peut servir à d'autres... merci d'ores et déjà pour le temps que t'as passé là dessus!
 
#8
ola voici le [url=http://www.electrocypher.com/Private/3DVF/tmaesScript/ParseXML_Lit00.zip]script[/url]. Ou plutot le template il fonctionne, mais il faut l'utiliser avec sagesse car il n'y a quasiment aucune méthode pour détecter les erreurs de frappes ou d'inattention. Quoi qu'il en soit j'ai écrit un bouton cancel qui restore tous les changements qui ont été fait. Donc dans le doute :) Bon courage pour la suite. ce script ne fonctionnera pas si le controle ActiveX chilkat n est pas présent sur le système de destination. Pour bien faire, il faudrait implémenter toutes les fonctions du controle AX en maxscript et pas juste 4 ou 5 comme j'ai fait ici. Il faudrait une interface compléte qui affiche dans une listview les balises et leurs attributs pour une édition directe avec recherche et remplacement. Mais ca représente une somme conséquente de travail. Image ++
 
#9
cool je vais apprendre à le dompter et je donne des nouvelles!! merci beaucoup...
 
#10
waaaa ça fonctionne! merci, je te tiendrai au courant, là je dois bosser pour un examen... ce Malikarn... quelle réactivité!!
 
#11
Oui ca fonctionne. Mais le problème c'est que ce script édite du code xml. Bon c'est très bien pour changer une balise ou deux comme ca. Mais ce qu'il manque vraiment a l'iu, c'est un retour visuel de que l'on est en train de faire. Parce que la, admettons tu changes 15 balises. Si tu n'as pas noté tout ce que tu as fait, je suis sur que tu ne dois plus trop savoir ou tu en es. il faudrait améliorer l'iu et inclure une fenetre maxscript qui affiche la balise complète en cours d'édition. puis il faudrait aussi un rollout avec un log pour dire combien d'occurrences de la balise ont ete trouvées, combien d'attributs, combien on été changés etc etc Enfin bon comme tu as pu voir c'est un peu le bordel dans le code, j'ai fait ca au lance pierre par manque de temps. Si tu as des questions pour implémenter d'autres fonctions n'hésite pas. ++
 
#12
je vois ce que tu veux dire... ce que je compte faire, c'est intégrer des éléments dans l'xml, ces éléments seront eux mêmes composés de plusieurs lignes de xml... ce que je comptais faire, c'était générer des fichiers temporaires, un peu comme le backup que tu as implémenté, et les concaténer à la fin de la manière la plus appropriée, mais tu n'as pas tort, une visualisation de ce qui sera généré ne serait pas mal...
 
#13
voilà j'ai un peu de temps pour penser à ce code, j'ai fait une esquisse de ce que je voudrais faire grâce à la méthode que tu m'as concoctée... je voudrais créer deux fonctions, une pour éditer une autre pour insérer. à la sélection du fichier xml, un clone temporaire serait créé (quel endroit est le plus judicieux?) et les changements se feraient sur lui avant le "apply" final. heu à ce stade ce n'est qu'une interface vite faite, y a encore aucun bouton relié, et l'aperçu, c'est un photomontage :ange: ... Image
 
#14
Ça fait une paie que je n'ai plus mis les mains dans le cambouis... Voilà où j'en suis.... Image les deux cadres du haut fonctionnent, il y a 9/10 basés sur ton code et 1/10 qui sont mes balbutiements :jap: j'ai ajouté :sweat: une "visualisation" des changements ou de l'état du fichier édité, et ça fonctionne plutôt bien... sauf que j'ai pas de scrollbars... david lanier m'a dit sur son forum qu'il y avait "no way" pour ça...je le crois. Question: penses tu qu'il y ait moyen d'atteindre une sous balise et si oui quelle serait la syntaxe de la requète? dans l'exemple créé automatiquement ce serait genre woningSysteem>energieBronOVW1...(v. edit) le script: http://tmaes.no-ip.org/tmaes/temp/-tmaes-.zip (si tu veux essayer, je te conseille de décompresser le dossier -tmaes- dans le dossier scripts pour certains chemins éventuellement créés à l'arrache, le script s'appelle XMLedit-FR.ms) EDIT j'ai fini par trouver la méthode, j'utilise un SearchForTag2 pour me placer dans la zone du code qui m'intéresse... j'ai pas encore tout à fait bien appréhendé cette façon de se "déplacer à l'aveuglette" dans un fichier texte, où se trouve le "curseur" à quel moment...c'est assez déroutant...
 
#15
Salut Le SearchForTag et son alter-ego SearchForTag2 font peu d'état de la hiérarchie. Ils renvoient la première balise (ou pointeur pour la version 2)qu'ils trouvent, selon les critères spécifiés, dans le sens haut en bas du xml. Et pas dans le sens de la hiérarchie. Ces fonctions se servent d'un afternode qui représente "le reste du xml". Il suffit donc de ré-invoquer SearchForTag sur cet afternode cette fois ci pour aller trouver la seconde balise si elle existe en partant de là où il s'était arrêté jusqu'à la fin du texte toujours en évoluant de haut en bas. Et ainsi de suite jusqu'a ce que la fonction renvoie undefined. C'est à dire qu elle a exploré tout le xml de haut en bas et qu'elle ne trouve plus rien. C'est exactement comme les fonctions Search du bloc note. Il te renvoie la première occurrence trouvée mais il se moque pas mal de la structure du fichier. Que des balises soient imbriquées ou non, ce n'est pas son problème. Dans mon script _Lit, j'ai écrit un bouton search qui fonctionne. Tu pourrais très bien compter le nombre de fois que la fonction renvoie un afternode != undefined pour compter le nombre d'occurrences d'une même balise. Puisque si c'est undefined, c'est que tu es arrivé a la fin du xml. Exemple : [cpp]Local TagCount = 0 AX_AfterNode = AX_pXML While AX_AfterNode != Undefined Do ( AX_AfterNode = AX_pXML.SearchForTag AX_AfterNode param param param If AX_AfterNode != Undefined Do TagCount += 1 ) AX_AfterNode = AX_pXML[/cpp] Le première ligne AX_AfterNode = AX_pXML permet de faire en sorte que afternode soit de la classe chilkat xml. C'est important pour que l'on puisse plus tard invoquer sur lui les méthode de cette classe telles SearchForTag ou GetXml. Or il n'existe pas de constructeur de cette classe en maxscript (pas plus que de destructeurs d'ailleurs). L'égalité est un subterfuge pratique. Ensuite je sais que SearchForAttribute finira forcément par renvoyer undefined lorsqu'il aura parcouru tout le xml donc je test cela. Et tant que ce n'est pas le cas, le Do() se re-invoque et le TagCount s'incrémente. C'est ici une manière de compter le nombre de balises identiques selon les critéres "params". La dernière ligne AX_AfterNode = AX_pXML réinitialise l'afternode qui contient maintenant undefined et qui ne fait donc plus parti de la classe Chilkat xml. Je rétablis donc cette injustice. L'endroit où j'incrémente TagCount est l'endroit idéal pour appeler une fonction du genre MonApercu.Text = Afternode.GetXml Si tu veux donner l'aperçu de la balise trouvée. Fait attention toutefois à la dernière itération du Do() ou forcément afternode sera undefined et ton apercu de planter. Le plus important dans cette procédure c'est de remarquer que l'afternode est à la fois un argument de SearchFortag mais aussi le resultat de cette fonction/méthode. On transmet a SearchForTag le resultat qu'elle a trouvé sur elle-meme à travers la variable Afternode. La version 2 de la fonction aurait été suffisante pour un compteur comme ici, mais pour créer un apercu, l'intéret de la version 1 est qu'elle renvoie (aussi et curieusement) la balise trouvé et tout son contenu. Très pratique justement pour créer un apercu. Si tu édites cet aperçu et que tu souhaites le re-injecter dans le code, il faut te tourner vers un updateAttribute qui manque un peu de flexibilité mais devrait remplir son rôle. Sinon et pour finir je pense qu'il faut tout de même reconsidérer le bienfondé d'un tel script. Nous voulons créer un outil qui : 1 dispose de méthodes FileIO (ouvrir un fichier, enregistrer, créer un nouveau fichier etc) 2 propose des methodes de parsing (rechercher un tag/Attribute/Value, rechercher le suivant, remplacer éventuellement etc) 3 propose un feedback visuel du code xml 4 propose une édition directe de ce feedback Si c'est tout là ce que nous voulons faire, l'éditeur MXS le fait déjà. Il suffit à la limite de le basculer en langage XML (menu langage-->xml plutot que mxs). Au départ j'avais bien compris que tu voulais un outil simplissime avec idéalement un seul bouton et lorsque tu l'actionnes, il change une valeur et enregistre. Mais en étudiant le xml de plus prés, je me suis rendu compte qu'il fallait une armada de routines pour parer à toutes les éventualités (tag de meme nom, attributs de meme noms mais dans un tag differents etc).Qu'il fallait aussi lui donner un feedback visuel, qu'il fallait rendre compte à l'utilisateur de la navigation entre les balises etc... J'avais donc créé le premier script ParseXML.ms que je ne t'ai pas remis parce qu'incomplet. En voyant que j'étais en train d'écrire une usine a gaz ou plus précisément de ré-écrire un éditeur de texte en maxscript (ce qui n'a aucun sens), je suis revenu en arrière et j'ai écris ParseXML_lit.ms. Une version allégée donc. C'est celle que je t'ai remise. Plus simple avec une iu réduite et nettement moins de possibilités mais qui avait le mérite de faire à moindre frais ce qu'on attendait de lui : trouver une valeur précise d'un attribut donné pour une balise donnée et la remplacer. Ce que je veux dire c'est que ton script ressemble de plus en plus à un editeur de texte générique. Et que le gain de temps qu'il t'offrira n'est pas significatif par rapport aux outils qui existent déjà. Effectivement ouvrir un xml dans le recepteur maxscript, faire control+H pour rechercher et remplacer une valeur et éventellement appuyer sur "suivant" deux ou trois fois pour se placer au "bon endroit". Ce n'est finalement pas si différent de ce que ton script permettra de faire. Il faudrait que ce script ait une fonction spéciale et unique qui justifie son existence... Dans tous les cas, bon courage pour la suite :) Je ne suis pas loin de toutes facons si tu galères sur la grammaire mxs. ++
 
space
space
space
space
space
space
space
space
A Propos | Contact | Publicité
Copyright © 2000-2018 3DVF. Tous droits réservés. | Infogérance serveur | tracker
space