Beispiel #1
0
    def setUp(self):
        self.compiler = fc.Compiler()
        self.compiler.add_func_path("../formulas")
        self.compiler.add_func_path("../fract4d")

        self.f = gtkfractal.T(self.compiler)
        self.settings = painter.PainterDialog(None, self.f)
Beispiel #2
0
 def setUpClass(cls):
     cls.tmpdir = tempfile.TemporaryDirectory(prefix="fract4d_")
     cls.userConfig = fractconfig.T("")
     cls.userConfig.set("general", "cache_dir",
                        os.path.join(cls.tmpdir.name, "gnofract4d-cache"))
     cls.userConfig["formula_path"].clear()
     cls.userConfig["map_path"].clear()
     cls.g_comp = fc.Compiler(cls.userConfig)
     cls.g_comp.add_func_path("fract4d")
     cls.g_comp.add_func_path("formulas")
Beispiel #3
0
 def setUp(self):
     self.tmpdir = tempfile.TemporaryDirectory(prefix="fract4d_")
     self.userConfig = fractconfig.T("")
     self.userConfig.set("general", "cache_dir",
                         os.path.join(self.tmpdir.name, "gnofract4d-cache"))
     self.userConfig["formula_path"].clear()
     self.userConfig["map_path"].clear()
     self.g_comp = fc.Compiler(self.userConfig)
     self.g_comp.add_func_path("../fract4d")
     self.g_comp.add_func_path("../formulas")
Beispiel #4
0
    def testPrefs(self):
        compiler = fc.Compiler(Test.userConfig)
        prefs = fractconfig.T("testprefs")
        prefs.set("compiler", "name", "x")
        prefs.set("compiler", "options", "foo")
        prefs.set_list("formula_path", ["fish"])
        prefs.set_list("map_path", ["wibble"])

        compiler.update_from_prefs(prefs)

        self.assertEqual("x", compiler.compiler_name)
        self.assertEqual("foo", compiler.flags)
        self.assertEqual(["fish"], compiler.path_lists[0])
        self.assertEqual(["wibble"], compiler.path_lists[3])
Beispiel #5
0
    def testFileTimeChecking(self):
        'Check we notice when a file changes'
        f2 = fc.Compiler(Test.userConfig)

        formulas = '''
test_circle {
loop:
z = pixel
bailout:
|z| < @bailout
default:
float param bailout
	default = 4.0
endparam
}
test_square {
loop:
z = pixel
bailout: abs(real(z)) > 2.0 || abs(imag(z)) > 2.0
}
'''
        fftest_file = os.path.join(Test.tmpdir.name, "fttest.frm")
        with open(fftest_file, "w") as f:
            f.write(formulas)

        f2.load_formula_file(fftest_file)
        frm = f2.get_formula(fftest_file, "test_circle")
        self.assertEqual(frm.symbols.default_params(), [0, 4.0])

        formulas = formulas.replace('4.0', '6.0')
        time.sleep(1.0)  # ensure filesystem will have a different time
        with open(fftest_file, "w") as f:
            f.write(formulas)

        frm2 = f2.get_formula(fftest_file, "test_circle")
        self.assertEqual(frm2.symbols.default_params(), [0, 6.0])
Beispiel #6
0
 def testInstance(self):
     compiler = fc.Compiler(Test.userConfig)
     self.assertNotEqual(None, compiler)
     self.assertEqual(compiler.flags,
                      fractconfig.T("").get("compiler", "options"))
Beispiel #7
0
    def generate_fct(self):
        self.values = []
        self.durations = []
        version = self.find_version()
        if version == '-1':
            self.show_error(
                "Could not find gnofract4d version. Can not continue")
            yield False
            return
        #-------------loads gnofract4d libs----------------------------
        try:
            self.fractal = fractal
            self.compiler = fc.Compiler()
            self.compiler.add_func_path("formulas")
            self.compiler.add_func_path("../formulas")
            self.compiler.add_func_path(
                fractconfig.instance.get_data_path("formulas"))
        except:
            self.show_error("Gnofract4d libs could not be found")
            yield False
            return
        #--------------------------------------------------------------
        #find values from base keyframe first
        try:
            ret = self.find_values(self.dir_bean.get_base_keyframe())
            if len(ret) == 11:
                self.values.append(ret)
            else:
                self.show_error("Unknown error during reading base keyframe")
                yield False
                return
        except:
            self.show_error("Unknown error during reading base keyframe")
            yield False
            return
        try:
            #find values and duration from all keyframes
            for i in range(self.dir_bean.keyframes_count()):
                ret = self.find_values(self.dir_bean.get_keyframe_filename(i))
                if len(ret) == 11:
                    self.values.append(ret)
                elif len(ret) > 1:
                    self.show_error("Error finding %s values in file: %s" %
                                    (ret[0], ret[1]))
                    yield False
                    return
                else:
                    self.show_error("Error reading .fct file")
                    yield False
                    return
                self.durations.append(self.dir_bean.get_keyframe_duration(i))
            #interpolate and write .fct files
            for i in range(self.dir_bean.keyframes_count()):
                if self.running == False:
                    yield False
                    break
                self.write_fct_file(i)
                percent = float(i + 1) / float(self.dir_bean.keyframes_count())
                if self.running == False:
                    break
                self.pbar.set_fraction(percent)
                self.pbar.set_text(str(percent * 100) + "%")
                yield True
        except:
            self.show_error("Unknown error during generation of .fct files")
            yield False
            return

        if self.running == False:
            yield False
            return
        self.running = False
        self.dialog.destroy()
        yield False
import math
import os
import gettext
import sys

sys.path.insert(1, "..")
from fract4d import fc, fractal

import gtkfractal
import gtk

os.environ.setdefault('LANG', 'en')
gettext.install('gnofract4d')

# centralized to speed up tests
g_comp = fc.Compiler()
g_comp.add_func_path("../fract4d")
g_comp.add_func_path("../formulas")

class FakeEvent:
    def __init__(self,**kwds):
        self.__dict__.update(kwds)

class CallCounter:
    def __init__(self):
        self.count = 0
    def cb(self,*args):
        self.count += 1

class Recurser:
    def __init__(self):
Beispiel #9
0
    def __init__(self, userConfig, extra_paths=[]):
        self.quit_when_done = False
        self.save_filename = None
        self.compress_saves = True
        self.f = None
        self.use_preview = True
        self.normal_display_size = None
        self.normal_window_size = None

        self.userConfig = userConfig
        self.userPrefs = preferences.Preferences(userConfig)

        self.four_d_sensitives = []

        # window widget
        self.window = Gtk.Window()
        self.window.set_default_size(
            self.userPrefs.getint("main_window", "width"),
            self.userPrefs.getint("main_window", "height"))
        self.window.connect('delete-event', self.quit)
        self.window.connect('window-state-event', self.on_window_state_event)
        self.window.set_name('main_window')

        theme_provider = Gtk.CssProvider()
        css_file = "gnofract4d.css"
        this_path = os.path.dirname(sys.modules[__name__].__file__)
        css_filepath = os.path.join(this_path, "..", css_file)
        if not os.path.exists(css_filepath):
            css_filepath = fractconfig.T.get_data_path(css_file)
        theme_provider.load_from_path(css_filepath)
        Gtk.StyleContext.add_provider_for_screen(
            Gdk.Screen.get_default(), theme_provider,
            Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)

        # custom icon images for toolbar buttons
        Gtk.IconTheme.prepend_search_path(
            Gtk.IconTheme.get_default(),
            os.path.dirname(
                fractconfig.T.find_resource('pixmaps/explorer_mode.png', '..',
                                            '')))

        # keyboard handling
        self.keymap = {
            Gdk.KEY_Left: self.on_key_left,
            Gdk.KEY_Right: self.on_key_right,
            Gdk.KEY_Up: self.on_key_up,
            Gdk.KEY_Down: self.on_key_down,
            Gdk.KEY_Escape: self.on_key_escape
        }

        self.window.connect('key-press-event', self.on_key_press)
        self.window.connect('key-release-event', self.on_key_release)

        # create fractal compiler and load standard formula and
        # coloring algorithm files
        self.compiler = fc.Compiler(userConfig)

        for path in extra_paths:
            self.compiler.add_func_path(path)

        self.vbox = Gtk.VBox()
        self.window.add(self.vbox)

        self.f = gtkfractal.T(self.compiler, self)
        self.f.freeze()  # create frozen - main prog will thaw us
        self.create_subfracts(self.f)

        self.set_filename(None)

        try:
            # try to make default image more interesting
            self.f.set_cmap(
                fractconfig.T.find_resource("basic.map", "maps", "maps"))
        except Exception as ex:
            #print ex
            pass

        self.model = model.Model(self.f)

        self.userPrefs.connect('image-preferences-changed',
                               self.on_prefs_changed)

        self.create_ui()
        self.create_toolbar()
        self.panes = Gtk.Paned.new(Gtk.Orientation.HORIZONTAL)
        self.vbox.add(self.panes)
        self.create_status_bar()

        self.create_fractal(self.f)
        self.panes.pack1(self.swindow, resize=True, shrink=True)

        # show everything apart from the settings pane
        self.window.show_all()

        self.settingsPane = settings.SettingsPane(self, self.f)
        self.panes.pack2(self.settingsPane, resize=False, shrink=False)

        # create these properly later to avoid 'end from FAM server connection' messages
        self.saveas_fs = None
        self.saveimage_fs = None
        self.hires_image_fs = None
        self.open_fs = None

        self.renderQueue = renderqueue.T(self.userPrefs)

        self.update_subfract_visibility(False)
        self.populate_warpmenu(self.f)
        self.update_image_prefs(self.userPrefs)

        self.statuses = [
            _("Done"),
            _("Calculating"),
            _("Deepening (%d iterations)"),
            _("Antialiasing"),
            _("Paused"),
            _("Reducing Periodicity Tolerance")
        ]

        self.f.set_saved(True)

        self.directorDialog = director.DirectorDialog(self.window, self.f,
                                                      self.userConfig)
        self.painterDialog = painter.PainterDialog(self.window, self.f)
        self.renderqueueDialog = renderqueue.QueueDialog(
            self.window, self.f, self.renderQueue)
Beispiel #10
0
#!/usr/bin/env python3

# test cases for parfile.py

import string
import unittest
import io
import math
import sys

if sys.path[1] != "..": sys.path.insert(1, "..")

from fract4d import testbase, fractal, fractconfig, fc, preprocessor, gradient
from fractutils import parfile

g_comp = fc.Compiler(fractconfig.T(""))
g_comp.add_func_path("../formulas")
g_comp.add_func_path("../fract4d")
g_comp.load_formula_file("gf4d.frm")
g_comp.load_formula_file("test.frm")
g_comp.load_formula_file("gf4d.cfrm")

fotd = """FOTD_for_04-05-06  { ; time=2:38:57.82--SF5 on a P200
reset=2004 type=mandel passes=1
center-mag=-0.74999655467724592903865/0.0171269216\\
3034049041486/5.51789e+018 params=0/0 float=y
maxiter=72000 inside=0 periodicity=10
colors=0000qJ0mP0iX0eb0di0`o0Xu0Tz2Pz2NzRTzoZqzbRz\\
dTzdTzeTzeTzeTzgVzgVzgVziVziVzkXzkXzkXzmXzmXzmXzgV\\
zdTu`RkXP`TNRNNGJL6GJ0CH08K04U0GcAWdPdkehvpmuxrzzx\\
zzzuzzqzzmzzizzezzbzzZzzVzzTzzRzzRxzPozPexNZvNPsLG\\