[Therion] Line wall AUT crashes and a fix
Bruce
dangle at tomo.co.nz
Sat Jul 2 11:31:25 CEST 2011
I have been using some of Georg Pacher's very clever (I think) AUT symbols
in their standard form, allocated from within a layout with .
symbol-assign area debris AUT
symbol-assign line wall:debris AUT
symbol-assign point debris AUT
etc
All has been going quite well for sometime, but tonight Therion 5.3.8 gets
into an endless loop, repeating the following text.
l_wall_debris->...factor:=scale_factor-0.01;endfor
;thdraw.block.rotated.angl.
l.6513 ))
;
! Value is too large (-4104.55951).
<forever> ...k)<0;scale_factor:=scale_factor-0.01;
ENDFOR
I tend to use a scale of 1:1000, but this time I was using 1:5000, so I'm
guessing that has overloaded one of the functions in the final loop below.
Not sure which variable or function is causing the crash but the value is
always the same for any particular scale at each loop cycle.
At these scales the length of each line is often going to be much less than
the size of the symbol so I expect we need a more cunning exitif criteria.
I have made a stab at fixing it below (the exitif in grey), but it is
probably not the best solution. It works now however at 1:1000, 1:5000 and
1:10,000.
Someone who knows what they are doing might be able to propose a better fix
and Martin/Stacho could include it in the next snapshot.
I am perplexed by two other somewhat unrelated things.
The debris symbols as they turn out in the output are all filled except the
first or last one (not sure which) and yet I cannot find a fill command in
the code. Having one not filled gives nice quirky random effect, but they
are perhaps better filled?
Line blocks AUT works perfectly, and yet the code seems to have the same
general type of loop and test as the line debris AUT that gives this
problem.
Cheers, Bruce
def l_wall_debris_AUT (expr P) =
T:=identity;
pickup PenC;
laenge := arclength P;
path block;
path old_block;
cur := 0;
t:= arctime cur of P;
% draw first block
old_block :=
(((-.0u,-.0u)--(.25u,-.15u)--(.45u,0.01u)--(.2u,.25u)--(.05u,.15u)--cycle));
block_width := (xpart urcorner old_block - xpart ulcorner old_block);
old_block:=old_block rotated angle(thdir(P,0)) shifted point t of P;
thclean old_block;
thdraw old_block;
cur := cur + 0.9*block_width;
t:= arctime cur of P;
% proceed with path
forever:
% generate random block
block := punked
(((-.25u,-.25u)--(0.25.u,-.25u)--(0.50u,0.01u)--(0.25u,.25u)--(-.25u,.25u)--
cycle)
randomized (u/4))
scaled (uniformdeviate(0.3)+.4)
rotated uniformdeviate(360);
% check width of block
block_width := (xpart urcorner block - xpart ulcorner block);
exitif cur > (laenge- 2.5*block_width/2);
% find next position where the block fits in without intersecting
the previous one
forever:
exitif xpart ( (block rotated angle(-direction t of P)
shifted point t of P) intersectiontimes old_block) < 0;
cur:=cur+0.01u;
t:= arctime cur of P;
exitif cur > (laenge- 2.5*block_width/2);
endfor;
exitif cur > (laenge- 2.5*block_width/2);
old_block:= block rotated angle(-direction t of P) shifted point t
of P;
thclean old_block;
thdraw old_block;
cur := cur + block_width/2;
t:= arctime cur of P;
endfor;
t:= arctime laenge-eps of P;
% generate last block
block :=
(((-.0u,-.0u)--(.25u,-.15u)--(.45u,0.01u)--(.2u,.25u)--(.1u,.15u)--cycle));
block_width := (xpart urcorner block - xpart ulcorner block);
% scale last block to fit in the remaining gap
scale_factor:=1.5*(laenge-cur)/block_width;
forever:
exitif scale_factor < 0; % bruces stab at preventing endless
loop at large scales
exitif xpart ( (block rotated angle(-direction t of P) scaled
scale_factor shifted (point t of P)) intersectiontimes old_block) < 0;
scale_factor:=scale_factor-0.01;
endfor;
thdraw block rotated angle(-direction t of P) scaled scale_factor
shifted (point t of P);
enddef;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.speleo.sk/pipermail/therion/attachments/20110702/fd355970/attachment.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image001.jpg
Type: image/jpeg
Size: 11133 bytes
Desc: not available
URL: <http://mailman.speleo.sk/pipermail/therion/attachments/20110702/fd355970/attachment.jpg>
More information about the Therion
mailing list