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; } }
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; }
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 }
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; }
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); } } } } }
// 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)); } }
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; }
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... } } } }
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; } }
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... } } }
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; }