POV-Ray : Newsgroups : povray.beta-test : Known Bugs Sep 28 : Re: Known Bugs Sep 28 Server Time
31 Jul 2024 04:14:57 EDT (-0400)
  Re: Known Bugs Sep 28  
From:
Date: 29 Oct 2001 06:01:16
Message: <madqttov353hsu8gaef92809kscol9pre3@4ax.com>
On Mon, 22 Oct 2001 20:05:24 +0200, "Rune" <run### [at] mobilixnetdk> 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

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.