def test(self): pdir = r"Y:\code\procodile\checkout\blockworld\misc\karthik\models" gid = r"forest.Forest" _class = get_class(pdir, gid) rc = RecipeConfig() rc.generator = ("root", pdir, gid) self.add_document(rc)
def load_generator(self, start_dir=None): loader = Loader() old_loader = set_loader(loader) try: g_info = get_generator_info(self.frame, self) if not g_info: return is_remote, name, package_dir, repo_uri, generator_id, ver = g_info if is_remote: rc = RecipeConfig() rc.generator = (generator_id, repo_uri, generator_id, ver) else: _class = get_class(package_dir, generator_id) if RecipeBasedGenerator in _class.__bases__: rc = _class.get_recipe_config() else: rc = RecipeConfig() rc.generator = (generator_id, package_dir, generator_id) doc = self.add_document(rc, loader) finally: set_loader(old_loader) self.run_document(doc)
def fill(self): self.root = self.widget.AddRoot('Generators') gens = self.recipe.generators for gen in gens: name, uri, _id, version = gen self.generators.append(name) gnode = self.widget.AppendItem(self.root, name) self._set_node_image(gnode, 'generator') self.widget.SetPyData(gnode, gen) root_name, root_uri, root_id, root_version = self.recipe.generator root_class = get_class(root_uri, root_id, root_version) children = get_children(root_class, root_id) for name, child in children.iteritems(): ident = child.IDENT if name in self.generators: continue self.generators.append(name) gnode = self.widget.AppendItem(self.root, name) self._set_node_image(gnode, 'generator') gen_data = (name, ident.location, ident.id, ident.version) self.recipe.add_generator(*gen_data) self.widget.SetPyData(gnode, gen_data)
def _get_class(self, location, _id, version=None): old_loader = set_loader(self.loader) try: _class = get_class(location, _id, version) finally: set_loader(old_loader) return _class
#! /usr/bin/python import math from procodile.procedural import BaseGenerator, Material as M import procodile.draw as draw from procodile.loader import get_class bus = get_class(r'c:\code\procodile\misc\vikraman', 'bus.Bus') class Divider(BaseGenerator): CONFIG = ( 'length', (100, 500), 'width', (1, 4), 'height', (0.4, 1.5) ) SUB_GENERATORS = { } def generate(self, config): C = config divider = draw.makeBox(C.width, C.length, C.height) self.add_geom(divider) class Junction(BaseGenerator): CONFIG = ( 'length', (50, 100), 'width', (2, 10), )
def _load_generator(self, location, _id, version): location = location or self.package_dir generator = get_class(location, _id, version) return generator