[Sidefx-houdini-list] Expression syntax for matrices and vectors

Andy Nicholas andy at andynicholas.com
Wed Oct 31 07:25:36 EDT 2007


Hi Guillaume, good to see you over here!

Thanks for the suggestion. I've ventured into both a little bit, but I've
not used it enough for it to be as intuitive as you're finding it.

One thing that's tripping me up at the moment is that I've not quite
figured out how to use the VEX inline node (inside a VOP network), or how
to use a VEX function node outside VOPs. As yet, I haven't found any
source of information on these to decipher how they work. Any links you
may have would be gratefully received :-)

Cheers!

Andy



>>(BTW, people should check out XSI's maths routines/objects for an example
>>of a really well structured (and documented) system.)
>
> Hi Andy :-)
>
> Take a look at vops. It will be much more easy than a loonnng expression
> and
> much more easy than using the XSI sdk ;-).
> And if you don't find the node for your needs you can create your own
> operator in VEX. I find VEX language is much more intuitive and fast to
> write than the XSI Math object for example.
>
> 1/2
>
> Guillaume Laforge | La Maison
>
>
>
> On 10/30/07, Andy Nicholas <andy at andynicholas.com> wrote:
>>
>> Haha! Fantastic. Thanks so much for taking the time to type all that
>> out.
>> That's really cleared a lot of things up for me.
>>
>> So I take it from the last bit you wrote, you could also do something
>> like
>> this?:
>>
>> vector v = vector4(<expr>,<expr>,<expr>,<expr>);
>>
>> in which case, that solves the question about using the quattomatrix()
>> function. I'll try it out.
>>
>> But is it me, or is this whole stripmatrix thing a little obtuse! It'd
>> be
>> great if they could just add direct member access like they already do
>> for
>> vectors. I've not starting using H9 yet, so maybe Python supports it.
>>
>> (BTW, people should check out XSI's maths routines/objects for an
>> example
>> of a really well structured (and documented) system.)
>>
>> Thanks again for your help Mario :-)
>>
>> All the best,
>>
>> Andy
>>
>>
>> > On October 30, 2007 10:38 am, Andy Nicholas wrote:
>> >
>> >> i.e. this syntax (a trivial example):
>> >>
>> >> {
>> >>    float a = ch("sparevar_a");
>> >>    float b = ch("sparevar_b");
>> >>    return a*b;
>> >> }
>> >
>> > OK. That's the "expression language" -- part of "hscript", now
>> replaced
>> > (or
>> > "superceded", I guess is a better term) with Python.
>> >
>> > Here's one way to extract elements or rows from a matrix using the
>> > expression
>> > language (either in-line like you're using it, or in a standalone
>> custom
>> > expression function):
>> >
>> > Extracting the translation 3-vector
>> > {
>> > string m = stripmatrix(optransform("/obj/ground"));
>> > vector T = vector3(arg(m,12),arg(m,13),arg(m,14));
>> > return T;
>> > }
>> >
>> > A single element from the translation (x in this case)
>> > {
>> > string m = stripmatrix(optransform("/obj/ground"));
>> > vector T = vector3(arg(m,12),arg(m,13),arg(m,14));
>> > return T[0];
>> > }
>> >
>> > Arbitrary element extraction:
>> > {
>> > string m = stripmatrix(optransform("/obj/ground"));
>> > float m11 = arg(m,0);
>> > float m12 = arg(m,1);
>> > float m13 = arg(m,2);
>> > float m14 = arg(m,3);
>> > float m21 = arg(m,4);
>> > float m22 = arg(m,5);
>> > float m23 = arg(m,6);
>> > float m24 = arg(m,7);
>> > float m31 = arg(m,8);
>> > float m32 = arg(m,9);
>> > float m33 = arg(m,10);
>> > float m34 = arg(m,11);
>> > float m41 = arg(m,12);
>> > float m42 = arg(m,13);
>> > float m43 = arg(m,14);
>> > float m44 = arg(m,15);
>> > return m41;
>> > }
>> >
>> > And so on. Basically: stripmatrix() converts the usual bracketed
>> syntax
>> > into a
>> > space-separated list of components that the arg() function can then
>> > extract
>> > elements from.
>> >
>> >>
>> >>
>> >> Actually, you've just uncovered a bigger confusion for me here. What
>> are
>> >> expressions? Are they supposed to be HScript? If so, what's the
>> >> difference?
>> >
>> > Expressions are used inside parameters to calculate some value. The
>> list
>> > of
>> > functions that can be used in these expressions is given by typing
>> > "exhelp"
>> > in the textport. The hscript commands are used to manipulate your
>> houdini
>> > session via text commands, and the commands available are given when
>> you
>> > type
>> > "help" in the textport.
>> >
>> >>
>> >> >>so not clear what you mean.
>> >>
>> >> Yes, you're right, I meant to type Matrix and Vector as lowercase.
>> But
>> >> I've just figured that the only way (that I've found as yet) to
>> create
>> a
>> >> vector is to do this:
>> >>
>> >> vector v = vector("["+unitz_x+","+unitz_y+","+unitz_z+"]");
>> >
>> > vector v = vector3(<expr>,<expr>,<expr>);
>> >
>> >
>> > HTH. Cheers!
>> >
>> > --
>> > ......................................................................
>> > Mario Marengo                                  mailto:mario at axyzfx.com
>> > AXYZ ANIMATION                                 http://www.axyzfx.com
>> > ......................................................................
>> >
>>
>>
>> _______________________________________________
>> Sidefx-houdini-list mailing list
>> Sidefx-houdini-list at sidefx.com
>> https://lists.sidefx.com:443/mailman/listinfo/sidefx-houdini-list
>>
>





More information about the Sidefx-houdini-list mailing list