|
![](/i/fill.gif) |
On Mon, 22 Oct 2001 20:05:24 +0200, "Rune" <run### [at] mobilixnet dk> wrote:
> Thank you! It's very appreciated.
this macro is not on the list but I think it could be usefull
(and that's why I talked so much about declaring arrays
and pointing to elements with loops - this macro could
be veeery short with it)
// Array - an array to be resized
// Dimension - number of dimension to be resized
// NewSize - new number of entries for Dimension of Array
#macro Resize_Multi_Array(Array, Dimension, NewSize)
#if((Dimension>0)&(dimensions(Array)>=Dimension)&(int(Dimension)=Dimension))
#if(dimensions(Array)!=1)
#switch(dimensions(Array))
#case(2)
#local NewArray=array
[(Dimension!=1?dimension_size(Array,1):NewSize)]
[(Dimension!=2?dimension_size(Array,2):NewSize)]
#local Max1 =
min(dimension_size(NewArray,1),dimension_size(Array,1));
#break
#case(3)
#local NewArray=array
[(Dimension!=1?dimension_size(Array,1):NewSize)]
[(Dimension!=2?dimension_size(Array,2):NewSize)]
[(Dimension!=3?dimension_size(Array,3):NewSize)]
#break
#case(4)
#local NewArray=array
[(Dimension!=1?dimension_size(Array,1):NewSize)]
[(Dimension!=2?dimension_size(Array,2):NewSize)]
[(Dimension!=3?dimension_size(Array,3):NewSize)]
[(Dimension!=4?dimension_size(Array,4):NewSize)]
#break
#case(5)
#local NewArray=array
[(Dimension!=1?dimension_size(Array,1):NewSize)]
[(Dimension!=2?dimension_size(Array,2):NewSize)]
[(Dimension!=3?dimension_size(Array,3):NewSize)]
[(Dimension!=4?dimension_size(Array,4):NewSize)]
[(Dimension!=5?dimension_size(Array,5):NewSize)]
#break
#else
#error "Wrong Dimension argument in Resize_Multi_Array macro"
#end
#local Max=array[dimensions(Array)]
#local C=0;
#while (C<dimensions(Array))
#local
Max[C]=min(dimension_size(NewArray,C+1),dimension_size(Array,C+1));
#local C=C+1;
#end
#local C=Max
#switch(dimensions(Array))
#case(2)
#local C[0]=0;
#while (C[0]<Max[0])
#local C[1]=0;
#while(C[1]<Max[1])
#ifdef(Array[C[0]][C[1]])
#local NewArray[C[0]][C[1]] = Array[C[0]][C[1]];
#end
#local C[1] = C[1] + 1;
#end
#local C[0] = C[0] + 1;
#end
#break
#case(3)
#local C[0]=0;
#while (C[0]<Max[0])
#local C[1]=0;
#while(C[1]<Max[1])
#local C[2]=0;
#while(C[2]<Max[2])
#ifdef(Array[C[0]][C[1]][C[2]])
#local NewArray[C[0]][C[1]][C[2]] =
Array[C[0]][C[1]][C[2]];
#end
#local C[2] = C[2] + 1;
#end
#local C[1] = C[1] + 1;
#end
#local C[0] = C[0] + 1;
#end
#break
#case(4)
#local C[0]=0;
#while (C[0]<Max[0])
#local C[1]=0;
#while(C[1]<Max[1])
#local C[2]=0;
#while(C[2]<Max[2])
#local C[3]=0;
#while(C[3]<Max[3])
#ifdef(Array[C[0]][C[1]][C[2]][C[3]])
#local NewArray[C[0]][C[1]][C[2]][C[3]] =
Array[C[0]][C[1]][C[2]][C[3]];
#end
#local C[3] = C[3] + 1;
#end
#local C[2] = C[2] + 1;
#end
#local C[1] = C[1] + 1;
#end
#local C[0] = C[0] + 1;
#end
#break
#case(5)
#local C[0]=0;
#while (C[0]<Max[0])
#local C[1]=0;
#while(C[1]<Max[1])
#local C[2]=0;
#while(C[2]<Max[2])
#local C[3]=0;
#while(C[3]<Max[3])
#local C[4]=0;
#while(C[4]<Max[4])
#ifdef(Array[C[0]][C[1]][C[2]][C[3]][C[4]])
#local
NewArray[C[0]][C[1]][C[2]][C[3]][C[4]] = Array[C[0]][C[1]][C[2]][C[3]][C[4]];
#end
#local C[4] = C[4] + 1;
#end
#local C[3] = C[3] + 1;
#end
#local C[2] = C[2] + 1;
#end
#local C[1] = C[1] + 1;
#end
#local C[0] = C[0] + 1;
#end
#break
#else
#error "Wrong Dimension argument in Resize_Multi_Array macro"
#end
#declare Array = NewArray
#else
Resize_Array(Array,NewSize)
#end
#else
#error "Wrong Dimension argument in Resize_Multi_Array macro"
#end
#end
ABX
--
#declare _=function(a,b,x){((a^2)+(b^2))^.5-x}#default {pigment{color rgb 1}}
union{plane{y,-3}plane{-x,-3}finish{reflection 1 ambient 0}}isosurface{ //ABX
function{_(x-2,y,1)|_((x+y)*.7,z,.1)|_((x+y+2)*.7,z,.1)|_(x/2+y*.8+1.5,z,.1)}
contained_by{box{<0,-3,-.1>,<3,0,.1>}}translate z*15finish{ambient 1}}//POV35
Post a reply to this message
|
![](/i/fill.gif) |