Hi Charlie
A generalised way to deal with the first run issue of Javascript patch not having input values is to use this around your script:

function (__string output_cmd) main (__string input_cmd, __structure positions)
{
        if (!_testMode)
        {
//              script goes here
        }
}

Also if you declare a variable outside the main function (usually before it) it will only get declared initially when composition is first Run and therefore will hold values across frames (not revert to declaration value).

Hope that is useful.
Alastair


Alastair I Leith

Useful Design
03 9480 5506
0432 889 831
30    Birch   St
West  Preston
VIC   3072 Au

On 14/01/2011, at 1:20 AM, Charlie Francis wrote:

Thanks Achim, I have changed the code a bit. I thought that on runtime it would have a list of positions, as I'm loading them in from an XML Sheet. But I guess QC must run the JavaScript before it has loaded the XML Sheet.

This is what I've ended up with:

function (__string output_cmd) main (__string input_cmd, __structure positions)
{
        if (Object.firstRun == undefined) {
                Object.firstRun = 1;
        } else {
                if (positions[input_cmd] != null) {
                        var result = new Object();
                        result.output_cmd = input_cmd;
                        return result;
                }
        }
}

I know all the things I ask are really basic, but thanks for taking the time to answer my questions.

Regards,
Charlie

On 13 January 2011 13:58, Achim Breidenbach <ac...@boinx.com> wrote:
Hello,

@George: the output_cmd and input_cmd seems to be correct to me. the structure comes in with positions, which is declared as __structure.

@Charlie: The script is once executed as a test without any parameters given. This gives you the error because you dont have an object in "positions".
lso you can't manipulate input parameter (input_cmd = ''"; will fail).

When I read your code correctly, you want to push through the input_cmd to output_cmd only if there is an object in the structure. (anyways, I am not sure about testing against "null" here)

function (__string output_cmd) main (__string input_cmd, __structure positions)
{
       var output_cmd = "";

       if (Object.firstRun == undefined) {
               Object.firstRun = 1;
       }
       else{
               if (positions[input_cmd] == null) {
                       output_cmd =  "";
               }
               else{
                       output_cmd = input_cmd;
               }
       }

       var result = new Object();
       result.output_cmd = output_cmd;
       return result;
}

I didn't test the code...

best,

Achim Breidenbach
Boinx Software

On 13.01.2011, at 14:40, George Toledo wrote:

> I totally haven't even read through your post, but note that you're declaring string input and output, while actually wanting to deal with structure. That's problematic, off top.
>
> What are you actually trying to achieve?
>
> -gt
>
> On Thu, Jan 13, 2011 at 8:37 AM, Charlie Francis <charl...@cellcastonline.com > wrote:
> Hi,
>
> I'm struggling a bit with using JavaScript within Quartz, especially how to use and abuse the structures that can be passed into the patch. > What I'm trying to achieve is only letting a string through that matches one of the keys in the structure. > Also, if the composition has only just been run, and no strings have been passed the return string should be blank.
>
> Below is an example of the structure I'm passing:
>
> 0: "left" = Structure
>       0: "x" = -1
>       1: "y" = 0
> 1: "right" = Structure
>       0: "x" = 1
>       1: "y" = 0
> 2: "center" = Structure
>       0: "x" = 0
>       1: "y" = 0
>
> And my Javascript at the moment is:
>
> function (__string output_cmd) main (__string input_cmd, __structure positions)
> {
>       var result = new Object();
>       var firstRun;
>
>       if(firstRun != 1) {
>               input_cmd = '';
>               firstRun = 1;
>       }
>
>       if (positions[input_cmd] == null) {
>               input_cmd = '';
>       }
>
>       result.output_cmd = input_cmd;
>       return result;
> }
>
> I seem to be getting an error on the if (positions[input_cmd] == null) { line, saying that positions is not an object.
>
> I'm also pretty sure the firstRun section is correct, as I've tested it on it's own and it works.
>
>
> So what is the correct way to work with Structures inside of a JavaScript patch?
>
> Regards,
> Charlie
>
>  _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Quartzcomposer-dev mailing list (Quartzcomposer-dev@lists.apple.com )
> Help/Unsubscribe/Update your Subscription:
> http://lists.apple.com/mailman/options/quartzcomposer-dev/gtoledo3%40gmail.com
>
> This email sent to gtole...@gmail.com
>
>
>
> --
> George Toledo
> gtole...@gmail.com
> www.georgetoledo.com
>
> The information contained in this E-mail and any attachments may be confidential. > If you have received this E-mail in error, please notify us immediately by telephone or return E-mail. > You should not use or disclose the contents of this E-mail or any of the attachments for any purpose or to any persons.
>
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Quartzcomposer-dev mailing list (Quartzcomposer-dev@lists.apple.com )
> Help/Unsubscribe/Update your Subscription:
> http://lists.apple.com/mailman/options/quartzcomposer-dev/achim%40boinx.com
>
> This email sent to ac...@boinx.com


_______________________________________________
Do not post admin requests to the list. They will be ignored.
Quartzcomposer-dev mailing list (Quartzcomposer-dev@lists.apple.com )
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/quartzcomposer-dev/qc.student.au%40gmail.com

This email sent to qc.student...@gmail.com

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Quartzcomposer-dev mailing list      (Quartzcomposer-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/quartzcomposer-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to