|
|
Would anyone know why this doesn't work
#macro AtIndex( A , I )
#if ( dimension_size(I,1) = dimensions(A) )
A[
#local ii = 0;
#while ( ii < dimensions(A) )
#if (ii > 0 )
][
#end
I[ii]
#local ii = ii + 1;
#end
// uncomment ';' to avoid error
] // ;
#else
#error "Dimension Mismatch"
#end
#end
#declare zippy = array[2][2]
#declare index = array[2] { 0, 1}
#declare zippy[0][1] = 2;
#declare tryit = AtIndex(zippy,index)
#debug Str(tryit)
#debug "\n"
What I'm aiming for is the following
#declare AtIndex(A, I) = 1;
AND
#declare tryit = AtIndex(A,I) ;
I can get the second by uncommenting the semicolon
But I would like the ability to assign to the array as well.
I can make it work with a second macro taking the assignment value
#macro SetAtIndex( A , I , N)
#if ( dimension_size(I,1) = dimensions(A) )
#declare A[
#local ii = 0;
#while ( ii < dimensions(A) )
#if (ii > 0 )
][
#end
I[ii]
#local ii = ii + 1;
#end
] = N ;
#else
#error "Dimension Mismatch"
#end
#end
I just think it would be neater with 1 macro
I think this is related to
When parsing an array it does not like macros as values
#declare uuu = array[3] {
Shear_Trans(x,z,y), // this line produces an error
Shear_Trans(y,-x,z) }
I thought that all the macro was doing was substituting new symbols
There are work arounds ( Assigning after declaring etc. )
but It's kind of annoying.
Post a reply to this message
|
|
|
|
On 9/16/2010 1:39 PM, lkreinitz wrote:
> Would anyone know why this doesn't work
>
> #macro AtIndex( A , I )
> #if ( dimension_size(I,1) = dimensions(A) )
> A[
> #local ii = 0;
> #while ( ii< dimensions(A) )
> #if (ii> 0 )
> ][
> #end
> I[ii]
> #local ii = ii + 1;
> #end
> // uncomment ';' to avoid error
> ] // ;
> #else
> #error "Dimension Mismatch"
> #end
> #end
You appear to be trying to access a member of an array with any number
of dimensions using the members of another array as the indices. Why
do you need a general-purpose solution for this? Your array access
should be tailored to the specific array you are using, and accessing
should not be left up to a macro.
> I thought that all the macro was doing was substituting new symbols
> There are work arounds ( Assigning after declaring etc. )
> but It's kind of annoying.
Yes, the macros are primarily symbol-substitution, but there comes a
point at which parsing starts without further substitution. If your
intended expression is not fully built at that point, there will be
problems.
Remember that the purpose of the scene description language is to
describe the scene you want to render. It is not intended to be a
general-purpose programming language.
Regards,
John
Post a reply to this message
|
|