|
|
"Droj" <803### [at] drojde> wrote:
worked a bit on you lsys7. Simplified a few minor things. Changed a bit in
LVertices and added debugging.
We're at "Parse Error: Expected 'RValue to declare', End of File found instead"
now.
ingo
---%<---------%<---------%<---
/*Pov-Ray : 3.8
Scene File : lsys.pov
Author : Ingo Janssen
Date : 2023-06-04
*/
#version 3.8;
global_settings{ assumed_gamma 1.0 }
#default{ finish{ ambient 0.1 diffuse 0.9 }}
#declare T_Pos = <0, 0, 0>;
#declare A_F = 14; // Angle increment
#declare Max_Items = 200;
#declare Curr_Items = 0;
#declare VXY_Arr = array[Max_Items]; // Pos stack for xy-plane
#declare AZZ_Arr = array[Max_Items]; // Angle stack for xy-plane
//build rules
#declare BuildRules = dictionary;
#macro F(T_Pos, AngleZZ)
#local T_Pos = <0, 0, 0>;
<T_Pos.x + cos(AngleZZ), T_Pos.y + sin(AngleZZ), T_Pos.z> // <x, y, 0>
#end
#declare BuildRules["F"] = 70; //chr(70) = F
#macro YawR(AngleZZ)
#local AngleZZ = 0;
AngleZZ + (tau/A_F)
#end
#declare BuildRules["+"] = 43;
#macro YawL(AngleZZ)
#local AngleZZ = 0;
AngleZZ - (tau/A_F)
#end
#declare BuildRules["-"] = 45;
#macro Turn(AngleZZ)
#local AngleZZ = 0;
AngleZZ - (tau/2)
#end
#declare BuildRules["|"] = 124;
// the following macros are needed for branching
#macro Push(T_Pos, AngleZZ)
#declare VXY_Arr[Curr_Items] = T_Pos;
#declare AZZ_Arr[Curr_Items] = AngleZZ;
#declare Curr_Items = Curr_Items + 1;
#end
#declare BuildRules["["] = 91;
#macro Pop(T_Pos, AngleZZ)
#declare Curr_Items = Curr_Items - 1;
#declare T_Pos = VXY_Arr[Curr_Items];
#declare AngleZZ = AZZ_Arr[Curr_Items];
#end
#declare BuildRules["]"] = 93;
//
// I left Ingo's brilliant rewrite macro untouched
#macro Ltransform(Axiom, Rules, Iterations)
#local Result = Axiom;
#for (i, 1, Iterations)
#local NewResult = "";
#local N = strlen(Result);
#local j = 1;
#while (j <= N)
#local CurrentSymbol = substr(Result, j, 1);
#ifdef(Rules[CurrentSymbol])
#local NewResult = concat(NewResult, Rules[CurrentSymbol]);
#else
#local NewResult = concat(NewResult, CurrentSymbol);
#end
#local j = j + 1;
#end
#local Result = NewResult;
#debug concat(Result, "\n")
#end
Result
#end
#macro Lvertices(Lstr)
#local T_Pos = <0, 0, 0>; // <x, y, z>
#local AngleZZ = 0;
//#local Curr_Item = 0;
#declare Return = array; //{<T_Pos.x, T_Pos.y, T_Pos.z>};
#declare Return[0] = <T_Pos.x, T_Pos.y, T_Pos.z>;
#for (i, 0, strlen(Lstr)-1)
#local CurrentSymbol = substr(Lstr, i, 1);
#ifdef (BuildRules[CurrentSymbol])
#switch (BuildRules[CurrentSymbol])
#case(70)
#debug "70 F \n"
#local T_Pos = F(T_Pos, AngleZZ);
#break
#case(43)
#debug "43 + \n"
#local AngleZZ = YawR(AngleZZ);
#break
#case(45)
#debug "45 - \n"
#local AngleZZ = YawL(AngleZZ);
#break
#case(124)
#debug "124 | \n"
#local AngleZZ = Turn(AngleZZ);
#break
#case(91)
#debug "91 [ \n"
#local Curr_Item = Push(T_Pos, AngleZZ);
#break
#case(93)
#debug "93 ] \n"
#local Curr_Item = Pop(T_Pos, AngleZZ);
#break
#end
#local InArr = Return[dimension_size(Return,1)-1];
#if (T_Pos.x != InArr.x | T_Pos.y != InArr.y | T_Pos.z != InArr.z)
#declare Return[dimension_size(Return,1)] = <T_Pos.x, T_Pos.y, T_Pos.z>;
#end
#end
#end
#declare Vertices = Return;
Vertices
#end
#declare Axiom = "FFFFX";
#declare Rules = dictionary{
["X"] : "F[-FX][+FX]",
["Y"] : "FX-Y"
};
#declare Iterations = 1;
#declare Lstr = Ltransform(Axiom, Rules, Iterations);
#declare Vertices = Lvertices(Lstr);
/*
#ifdef (Vertices)
#debug "OK \n"
#else
#debug "Undefined! \n"
#end
*/
/*#for(i, 0, dimension_size(Vertices,1)-2) // <== here Povray complains
cylinder{
Vertices[i],Vertices[i+1],0.1
texture{pigment{rgb 1}}
translate <-25, -5, 0>
rotate <0, 0, 0>
}
#end*/
camera{
location <0,0,-30>
look_at <0,0,0>
angle 120
right x*image_width/image_height
}
light_source{
<3000,3000,-3000>
color rgb 1
}
---%<---------%<---------%<---
Post a reply to this message
|
|