module inscription newsletter haut de page forum mobile

Ateliers et Formations

un script peut-il faire ça ?

Discussion in 'Archives moteurs' started by kivala, Dec 5, 2006.

Tags:
  1. kivala

    Trophy Points:
    1,000
    Likes Received:
    0
    Messages:
    105
    Appréciations:
    +0 / 0 / -0
    Bonjour!

    Je me permets de poster ici car j'ai besoin d'une aide et, malgré mes recherches sur le net, je ne parviens pas à m'en sortir seul.

    voici d'abord une description de mon projet.

    une compo contenant:

    - un calque "a" contenant 3 masques et un effet "reshape" (remodeler)

    - un calque "b" dupli du calque "a" dont les 3 masques ont des formes différentes ainsi qu'une valeur différente pour la propriété "percent" de l'effet "reshape

    - un calque "c" dupli du calque "b" dont les 3 masques ont des formes différentes ainsi qu'une valeur différente pour la propriété "percent" de l'effet "reshape

    - un calque "final" dupli du calque "a" dont je veux faire varier la forme des masques et la propriété "percent" de l'effet "reshape" qui lui est appliqué en fonction d'un :
    - calque "ref" situé en haut de la pile et qui est un calque texte dont je fais varier le contenu au cours du temps (il affiche "a", puis "b", puis "a", puis "c" etc...)


    le principe étant que :

    - quand "ref" affiche "a", "final" récupère la forme des masques du calque "a" ainsi que la valeur "percent" de son effet "reshape.

    - quand "ref" affiche "b", "final" récupère la forme des masques du calque "b" ainsi que la valeur "percent" de son effet "reshape.
    ...Idem pour "c"

    J'ai en partie réussi à résoudre le problème en utilisant l'expression suivante appliquée à la propriété "percent" de l'effet "reshape" du calque "final" :

    x=thisComp.layer("ref").text.SourceText.value;
    thisComp.layer(x).effect("reshape")("percent")

    J'aurais agi sur le même principe, si j'avais pu attribuer une expression à la propriété "mask shape" des masques... Malheureusement c'est impossible...

    2 questions :

    1 - est-ce qu'un script pourrait règler mon problème ?
    2 - voulez-vous une aspirine ?

    Merci aux cracks du codage de vous pencher sur mon souci !
     
  2. magna_

    Trophy Points:
    1,200
    Likes Received:
    2
    Messages:
    207
    Appréciations:
    +0 / 0 / -0
    je vais prendre l'aspirine :D .....
     
  3. kivala

    Trophy Points:
    1,000
    Likes Received:
    0
    Messages:
    105
    Appréciations:
    +0 / 0 / -0
    :D

    le plus terrible c'est que je sens que mes questions ne s'arrêtent pas là...

    Je n'ose pas invoquer le Dieu Vivant du scripting...
    Ce serait gonflé quand-même.... .... .... .... .... ....
     
  4. kivala

    Trophy Points:
    1,000
    Likes Received:
    0
    Messages:
    105
    Appréciations:
    +0 / 0 / -0
    d'après vous, qu'est-ce qui cloche ?

    Bon.

    Comme ma question déchaîne les passions, j'ai décidé d'essayer de me démerder seul.

    N'y connaissant ABSOLUMENT que dalle en script, j'ai quand même essayé de grapiller des infos sur le net (genre "ça sert à quoi une boucle "for"", "c'est quoi i++" etc...)

    Résultat : j'ai réussi à écrire un script...
    ... ... ... Enfin quand je dis "réussi", je veux dire que j'ai écrit un truc qui ressemble à un script mais qui en fait ne fonctionne pas du tout. Quand je le lance dans AE : aucune réaction. Même avec le débogage activé. C'est bien simple, AE n'en à rien à foutre de mon pseudoscript. :D

    Je vais vous soumettre cette chose afin que vous puissiez, selon votre niveau, me donner quelques conseils.
    Peut-être qu'en partant d'un truc concret, j'aurai plus de succès...

    voilà la chose
    PHP:
    for(i=0;i<=15;i++){
                    var 
    x=thisComp.layer("ref").text.sourceText.valueAtTime(i,true);
                    var 
    y=thisComp.layer("ref").text.sourceText.valueAtTime(i+1,true);
                            
                            if(
    x!=y){
                            var 
    mykeffect=thisComp.layer(x).effect("reshape")("percent").value;
                            var 
    mykmask1=thisComp.layer(x).mask(1).property("maskShape").value;
                            var 
    mykmask2=thisComp.layer(x).mask(2).property("maskShape").value;
                            var 
    mykmask3=thisComp.layer(x).mask(3).property("maskShape").value;
                            
                            var 
    myfinaleffect=thisComp.layer("final").effect("reshape")("percent");
                            var 
    myfinalmask1=thisComp.layer("final").mask(1).property("maskshape");
                            var 
    myfinalmask2=thisComp.layer("final").mask(2).property("maskshape");
                            var 
    myfinalmask3=thisComp.layer("final").mask(3).property("maskshape");
                            
                            
    myfinaleffect.setValueAtTime(i,mykeffect);
                            
    myfinalmask1.setValueAtTime(i,mykmask1);
                            
    myfinalmask2.setValueAtTime(i,mykmask2);
                            
    myfinalmask3.setValueAtTime(i,mykmask3);
                                }    
                        }
    Merci à vous !
     
  5. logicalnot

    Trophy Points:
    1,000
    Likes Received:
    0
    Messages:
    491
    Appréciations:
    +0 / 0 / -0
    Tu pourrais faire un dessin?
    Franchement, je suis pas alléà 4eme ligne de ton probleme…
    :o
     
  6. kivala

    Trophy Points:
    1,000
    Likes Received:
    0
    Messages:
    105
    Appréciations:
    +0 / 0 / -0
    Ben... Si les 3 premières lignes te paraissent si compliquées je crains que, même avec un dessin, tu ne puisses pas m'être d'un grand secours.... Malheureusement.
     
  7. kivala

    Trophy Points:
    1,000
    Likes Received:
    0
    Messages:
    105
    Appréciations:
    +0 / 0 / -0
    J'ai changé mon code en :
    PHP:
    var myComp app.project.activeItem


    for(i=0;i<=15;i++){
                    var 
    myComp.layer("ref").text.sourceText.valueAtTime(i,true);
                    var 
    myComp.layer("ref").text.sourceText.valueAtTime(i+1,true);
                            
                            if(
    x!=y){
                            var 
    mykeffect myComp.layer(x).effect("reshape")("percent").value;
                            var 
    mykmask1 myComp.layer(x).mask(1).property("maskShape").value;
                            var 
    mykmask2 myComp.layer(x).mask(2).property("maskShape").value;
                            var 
    mykmask3 myComp.layer(x).mask(3).property("maskShape").value;
                            
                            var 
    myfinaleffect myComp.layer("final").effect("reshape")("percent");
                            var 
    myfinalmask1 myComp.layer("final").mask(1).property("maskshape");
                            var 
    myfinalmask2 myComp.layer("final").mask(2).property("maskshape");
                            var 
    myfinalmask3 myComp.layer("final").mask(3).property("maskshape");
                            
                            
    myfinaleffect.setValueAtTime(i,mykeffect);
                            
    myfinalmask1.setValueAtTime(i,mykmask1);
                            
    myfinalmask2.setValueAtTime(i,mykmask2);
                            
    myfinalmask3.setValueAtTime(i,mykmask3);

                        }        
                    }
    et je reçois en retour l'erreur :

    Function myComp.layer is undefined
    undefined is not an object
    myComp.layer().test is not an object


    Je comprends pas. Vraiment trop noob pour le moment.
    Et pourtant j'ai absolument besoin de trouver la solution.....
     
  8. apoal1

    Trophy Points:
    1,200
    Likes Received:
    3
    Messages:
    740
    Appréciations:
    +0 / 0 / -0
    slt

    citation: selon votre niveau, me donner quelques conseils

    tu défini myComp avec activeItem, donc normalement le layer sélectionné.
    et après t'écris myComp.layer("ref), ce qui peut revenir dans ma logique à layer("1").layer("2), je ne sais pas si le javascript résous ça tout seul. une piste pour un débug.

    citation: myComp.layer().test is not an object
    la il y a une faute de frappe quelque part, .test n'apparait pas dans ton script posté

    je suis vraiment mauvais en script, la seul fois que j'ai modifié un script c'est en effaçant des lignes, alors créer des fonctions...

    +
     
  9. kivala

    Trophy Points:
    1,000
    Likes Received:
    0
    Messages:
    105
    Appréciations:
    +0 / 0 / -0
    d'abord merci apoa de t'intéresser à mon post.

    Je comprends ce que tu veux dire mais, dans mon esprit "activeItem" désigne la composition où se trouvent mes layers (en l'occurrence mon layer nommé "ref")
    Bien sûr, je suis totalement novice, mais il me semble que les items ne sont jamais des layers en tant que tels mais leur source (ou tout autre élément qui apparaît dans la fenetre projet)
    D'où la necessité pour atteindre mon layer ref de le nommer en suivant un chemin :
    app.project.activeItem.layer("ref")
    ou myComp.layer("ref") (puisque myComp=app.project.activeItem)
    Me gourre-je ??????


    en effet j'ai voulu écrire "text". mille excuses.
     
  10. apoal1

    Trophy Points:
    1,200
    Likes Received:
    3
    Messages:
    740
    Appréciations:
    +0 / 0 / -0
    re,

    en effet je viens de voir cette syntaxe dans des scripts qui fonctionne, désolé.

    tu peux peut etre regarder le script Streak Photo de nab qui utilise mask shape:
    nabscripts.com - Experiments

    +
     
  11. nab17connection

    Trophy Points:
    1,900
    Likes Received:
    1
    Messages:
    1,051
    Appréciations:
    +0 / 0 / -0
    en tous cas tu fais preuve de persévérance et ce que tu apprends là te servira sans doute lorsque tu auras besoin d'en écrire un autre :bravo: .

    d'apres ce que tu décris dans ton premier post, ce script devrait faire l'affaire:
    kivala_masks.jsx

    tu ne dis pas comment tu souhaites interpoler tes clés...donc par défaut elles seront interpolées; si tu souhaites les avoir en Hold (clé de maintien), tu mets "holdKeys = 1" (au lieu de 0) à la première ligne du script.
     
  12. kivala

    Trophy Points:
    1,000
    Likes Received:
    0
    Messages:
    105
    Appréciations:
    +0 / 0 / -0
    apoal,merci de tes conseils

    Nab, je teste tout de suite ton script.
    J'ai cru comprendre que tu étais LA référence du javascript ici. donc :jap: :jap: :jap: :jap:

    Je teste et je vous dis !
     
  13. kivala

    Trophy Points:
    1,000
    Likes Received:
    0
    Messages:
    105
    Appréciations:
    +0 / 0 / -0
    Bon, je viens de tester le script de Nab et j'ai toujours ce message dans ma console de débogage javascript:

    "function myComp.layer is undefined
    undefined is not an object
    myComp.layer().sourcetext is not an object"

    Je commence à suspecter un problème d'un autre ordre que le contenu du script.
    J'ai copié/collé le script dans le bloc notes de windows et je l'ai enregistré comme fichier jsx à la norme UTF-8.

    Est-ce que le problème ne viendrait pas de là ??
    ................................................................................
    Je viens de tester avec "unicode", "ANSI" et "unicode big endian" sans succès...



    [​IMG] os court
     
  14. kivala

    Trophy Points:
    1,000
    Likes Received:
    0
    Messages:
    105
    Appréciations:
    +0 / 0 / -0
    je viens de faire un petit test avec le mni script suivant :


    app.project.activeItem.layer(5).opacity.setValueAtTime(5,20)


    et on me renvoie le même type d'erreur :
    function app.project.activeItem.layer is undefined.


    C'est à s'arracher les cheveux .

    J'ai la version 6.0 pro.... Est-ce que ça joue ?
     
  15. nab17connection

    Trophy Points:
    1,900
    Likes Received:
    1
    Messages:
    1,051
    Appréciations:
    +0 / 0 / -0
    :lol: à mon avis oui

    C'est l'heure pour un petit update de Noel.
     
Loading...

Share This Page

Vous souhaitez annoncer sur le Repaire ? Contactez-nous