leaf.csc

 DRAWはオブジェクトが複雑になると「オブジェクトが複雑すぎて64kバイトを越えています」というようなメッセージを出して処理を拒みます。その64kがいつ出るのかを試すために、○を描いては結合するという処理を延々繰り返します。
 スクリプト的には単純ですが、せっかくのグラフィックソフト、少しは図形にしようとスクリプト中にも埋めてあるサイト(フラクタル図形を紹介しています。)でシダの葉のような形が出来る式を拾ってきて組み込みました。
 注意! ベンチマーク的な動作である上に、浮動小数点演算や比較処理を多用していますので、遅いです。1000個の○を書いてエラーを発生させるために小一時間必要です。
 実行結果は後処理(背景の追加、塗りつぶし、輪郭の調整など)を行っています。スクリプトの実行結果とは異なります。
 警告!
 このスクリプトはエラーを発生させるために書いたものです。

leaf 実行結果
'Try 64k!

'Copyright by Albatross
'Ver 1.00 2000/12/5

#DEFINE OBJECT_DRAW            "CorelDRAW.Automation.9"

global const e1 as double =0.5
global const e2 as double =0.57
global const e3 as double =0.408
global const e4 as double =0.1075
global const f1 as double =0
global const f2 as double =-0.036
global const f3 as double =0.0893
global const f4 as double =0.27

randomize

sub plot(imax as long)
on error goto eh
'Alexander F. Walz
'Maple V and Fractals
'http://www.math.utsa.edu/ftp/gokhman/mirrors/maple/frame03.htm
    dim x, y, xn, yn, z as double
    dim px,py,pnx,pny,c as long
    x = e1
    for c = 0 to imax
        z=rnd()
        if z<=0.02 then 
            xn = e1
            yn = 0.27*y+f1
        elseif z<=0.17 then 
            xn = -0.139*x+0.263*y+e2
            yn = 0.246*x+0.224*y+f2
        elseif z<=0.3 then 
            xn = 0.17*x-0.215*y+e3
            yn = 0.222*x+0.176*y+f3
        else
            xn = 0.781*x+0.034*y+e4
            yn = -0.032*x+0.739*y+f4
        endif
        px=int(xn*1000000)
        py=int(yn*1000000)
        WITHOBJECT OBJECT_DRAW
        .CreateEllipse py, px, py+1000, px+1000, 0, 0, FALSE
        if c<>0 then
            .selectallobjects
            .combine
        endif
        END WITHOBJECT
        x = xn
        y = yn
    next c
escl:
    exit sub

eh:
    message "Program aborted in counter = " & cstr(c)
    resume at escl
end sub


WITHOBJECT OBJECT_DRAW
    .SuppressPainting TRUE
    plot(12500)
    .ResumePainting 
    .FileSave "leaf.CDR", 1, 0, 0, 0
    message "終了しました"
END WITHOBJECT


<<戻る