public int initRandom(int seed)
 {
     random = new CS_Random(seed);
     return(random.nextInt());
 }
Exemple #2
0
        public void prepare(int seed)
        {
            //if (debug) { verbose=false; }

            // read in parameter values from ParamDB
            fromDB();

            if (ignoreVParams)
            {
                ScaleV = 0;
                for (int i = 1; i < 4; i++)
                {
                    CS_LevelParams lp = levelParams[i];
                    lp.nCurveV = 0;
                    lp.nLengthV = 0;
                    lp.nSplitAngleV = 0;
                    lp.nRotateV = 0;
                    // lp.nBranchDistV = 0;
                    if (lp.nDownAngle > 0) { lp.nDownAngle = 0; }
                }
            }

            // additional params checks
            for (int l = 0; l < Math.Min(Levels, 4); l++)
            {
                CS_LevelParams lp = levelParams[l];
                if (lp.nSegSplits > 0 && lp.nSplitAngle == 0)
                {
                    throw new Exception("nSplitAngle may not be 0.");
                }
            }

            // create one random generator for every level
            // so you can develop a tree level by level without
            // influences between the levels
            int ll = levelParams[0].initRandom(seed);
            for (int i = 1; i < 4; i++)
            {
                ll = levelParams[i].initRandom(ll);
            }

            // create a random generator for myself (used in stem_radius)
            random = new CS_Random(seed);

            // mesh settings
            if (Smooth <= 0.2)
            {
                smooth_mesh_level = -1;
            }
            else
            {
                smooth_mesh_level = (int)(Levels * Smooth);
            }
            mesh_quality = Smooth;

            // mesh points per cross-section for the levels
            // minima
            levelParams[0].mesh_points = 4;
            levelParams[1].mesh_points = 3;
            levelParams[2].mesh_points = 2;
            levelParams[3].mesh_points = 1;
            // set meshpoints with respect to mesh_quality and Lobes
            if (Lobes > 0)
            {
                levelParams[0].mesh_points = (int)(Lobes * (Math.Pow(2, (int)(1 + 2.5 * mesh_quality))));
                levelParams[0].mesh_points =
                    Math.Max(levelParams[0].mesh_points, (int)(4 * (1 + 2 * mesh_quality)));
            }
            for (int i = 1; i < 4; i++)
            {
                levelParams[i].mesh_points =
                    Math.Max(3, (int)(levelParams[i].mesh_points * (1 + 1.5 * mesh_quality)));
            }

            // stop generation at some level?
            if (stopLevel >= 0 && stopLevel <= Levels)
            {
                Levels = stopLevel;
                Leaves = 0;
            }

            scale_tree = Scale + levelParams[0].random.uniform(-ScaleV, ScaleV);
        }
 public int initRandom(int seed)
 {
     random = new CS_Random(seed);
     return random.nextInt();
 }