Пример #1
0
    public ComputeEngine(FractalSettings settings)
    {
        int height = settings.Height;		// note that we need to use these locals to avoid creating tens of thousands of BigFloat objects in the loop
        int width = settings.Width;
        m_samples = new float[width, height];
        for (int v = 0; v < height; ++v)
            for (int h = 0; h < width; ++h)
                m_samples[h, v] = float.NaN;

        //		Console.WriteLine("dx: {0:F}", settings.Extent.Width/width);

        const int NumThreads = 4;
        m_computers = new Computer[NumThreads];

        int startRow = 0;
        int numRows = height/NumThreads;
        for (int i = 0; i < NumThreads; ++i)
        {
            if (i + 1 == NumThreads)
                numRows = height - startRow;

            m_computers[i] = new Computer(settings, startRow, numRows, m_samples);
            startRow += numRows;
        }
    }
Пример #2
0
    public Document(FractalSettings settings)
        : base(NSObject.AllocAndInitInstance("Document"))
    {
        m_settings = settings;

        AppDelegate app = NSApplication.sharedApplication().delegate_().To<AppDelegate>();

        m_engine = new ComputeEngine(m_settings);
        m_palette = app.DefaultPalette;
    }
Пример #3
0
    public Computer(FractalSettings settings, int startRow, int numRows, float[,] samples)
    {
        Contract.Requires(startRow >= 0, "startRow is negative");
        Contract.Requires(numRows > 0, "numRows is not positive");
        Contract.Requires(samples != null, "samples is null");

        m_settings = settings;
        m_startRow = startRow;
        m_numRows = numRows;
        m_samples = samples;

        // TODO: may want to use threads so we can lower the priority of
        // images in the background (of course mono doesn't support thread
        // priorities...)
        ThreadPool.QueueUserWorkItem(o => DoThread());	// the pool uses background threads so the app will exit even if this thread is still running
    }
Пример #4
0
    void init(String p_name, Algorithm p_algorithm, float p_scale, NoiseStyle p_style, float p_min, float p_max, Edge p_edge, float p_edge_threshold)
    {
        fractalEnabled             = false;
        fractalsettings            = new FractalSettings();
        fractalsettings.layers     = 1;
        fractalsettings.lacunarity = 1.0f;
        fractalsettings.gain       = 1.0f;

        name           = p_name;
        algorithm      = p_algorithm;
        scale          = p_scale;
        min            = p_min;
        max            = p_max;
        style          = p_style;
        edge           = p_edge;
        edge_threshold = p_edge_threshold;
    }
Пример #5
0
    private void DoParseXml(XmlDocument doc)
    {
        foreach (XmlNode child in doc.ChildNodes)
        {
            if (child.Name == "fractal")
            {
                m_paletteExponent = float.Parse(child.Attributes["exponent"].Value);
                string name = child.Attributes["name"].Value;

                foreach (XmlNode gchild in child.ChildNodes)
                {
                    if (gchild.Name == "settings")
                    {
                        m_settings = new FractalSettings(gchild);
                    }
                    else if (gchild.Name == "palette")
                    {
                        m_palette = new Palette(name, gchild);
                    }
                }
            }
        }
    }
Пример #6
0
    // document().undoManager().setActionName should be called after this is called.
    public void updateSettings(Wrapper wrapper)
    {
        FractalSettings newSettings = (FractalSettings) wrapper.Value;

        if (newSettings != m_settings)
        {
            Wrapper oldSettings = Wrapper.Create(m_settings);
            undoManager().registerUndoWithTarget_selector_object(this, "updateSettings:", oldSettings);

            m_engine.Abort();
            m_settings = newSettings;
            m_engine = new ComputeEngine(m_settings);

            NSNotificationCenter.defaultCenter().postNotificationName_object(
                StateChanged, DocChange.Create(this, ChangeType.Settings));
        }
    }
Пример #7
0
	void init(String p_name,Algorithm p_algorithm,float p_scale,NoiseStyle p_style,float p_min,float p_max,Edge p_edge,float p_edge_threshold)
	{
		fractalEnabled = false;
		fractalsettings = new FractalSettings();
		fractalsettings.layers = 1;
		fractalsettings.lacunarity = 1.0f;
		fractalsettings.gain = 1.0f;
		
		name = p_name;
		algorithm = p_algorithm;
		scale = p_scale;
		min = p_min;
		max = p_max;
		style = p_style;
		edge = p_edge;
		edge_threshold = p_edge_threshold;		
	}
Пример #8
0
        private void button1_Click_1(object sender, RoutedEventArgs e)
        {
            // save fractal
            string store = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\WooFractal\\Scripts";
            if (!System.IO.Directory.Exists(store))
            {
                System.IO.Directory.CreateDirectory(store);
            }
            store = store + "\\" + "fractal";
            if (!System.IO.Directory.Exists(store))
            {
                System.IO.Directory.CreateDirectory(store);
            }

            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            saveFileDialog1.InitialDirectory = store;
            saveFileDialog1.Filter = "Fractal Descriptor (*.wfd)|*.wfd";
            saveFileDialog1.FilterIndex = 1;

            if (saveFileDialog1.ShowDialog() == true)
            {
                // Save document
                string filename = saveFileDialog1.FileName;
                using (StreamWriter sw = new StreamWriter(filename))
                {
                    try
                    {
                        FractalSettings fractalSettings = new FractalSettings();
                        fractalSettings.Set(_RenderOptions, _FractalColours, _FractalIterations);
                        sw.Write(fractalSettings.BuildXML());
                        sw.Close();
                    }
                    catch (Exception /*e*/)
                    {
                        // lets not get overexcited...
                    }
                }
            }
        }
Пример #9
0
        private void button2_Click_1(object sender, RoutedEventArgs e)
        {
            FractalSettings fractalSettings = new FractalSettings();
            
            // load fractal
            string store = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\WooScripter\\Scripts\\fractal";

            // Configure open file dialog box
            Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
            dlg.FileName = "fractal"; // Default file name
            dlg.DefaultExt = ".wfd"; // Default file extension
            dlg.Filter = "Fractal Descriptor|*.wfd"; // Filter files by extension
            dlg.InitialDirectory = store;

            // Show open file dialog box
            Nullable<bool> result = dlg.ShowDialog();

            // get name of file
            if (result == true)
            {
                string filename = dlg.FileName;
                StreamReader sr = new StreamReader(filename);
                string fractal = sr.ReadToEnd();
                fractalSettings.Load(fractal);
                sr.Close();
                _RenderOptions = fractalSettings._RenderOptions;
                _FractalColours = fractalSettings._FractalColours;
                _FractalIterations = fractalSettings._FractalIterations;
            }
        }
Пример #10
0
        private void SaveFractal(string name)
        {
            string store = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\WooFractal\\Scripts";
            if (!System.IO.Directory.Exists(store))
            {
                System.IO.Directory.CreateDirectory(store);
            }
            store = store + "\\" + "fractal";
            if (!System.IO.Directory.Exists(store))
            {
                System.IO.Directory.CreateDirectory(store);
            }
            string filename = store + "\\" + name + ".wfd";

            using (StreamWriter sw = new StreamWriter(filename))
            {
                try
                {
                    FractalSettings fractalSettings = new FractalSettings();
                    fractalSettings.Set(_RenderOptions, _FractalColours, _FractalIterations);
                    sw.Write(fractalSettings.BuildXML());
                    sw.Close();
                }
                catch (Exception /*e*/)
                {
                    // lets not get overexcited...
                }
            }
        }
Пример #11
0
 private FractalSettings LoadFractal(string name)
 {
     FractalSettings fractalSettings = new FractalSettings();
     string filename = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\WooFractal\\Scripts\\fractal\\" + name + ".wfd";
     if (System.IO.File.Exists(filename))
     {
         StreamReader sr = new StreamReader(filename);
         string fractal = sr.ReadToEnd();
         fractalSettings.Load(fractal);
         sr.Close();
         _RenderOptions = fractalSettings._RenderOptions;
         _FractalColours = fractalSettings._FractalColours;
         _FractalIterations = fractalSettings._FractalIterations;
     }
     return fractalSettings;
 }