示例#1
0
def colorListCode(colorlist = None, referencedir = None, indentation = '\t'):
    init_txt = ''
    if not colorlist is None and len(colorlist) > 0:
        defaultlist = PglTurtle().getColorList()
        nbdefault = len(defaultlist)
        nbcurrent = len(colorlist)
        firstcol = True
        defaultmat = Material('default')
        printer = PyStrPrinter()
        printer.pglnamespace = 'pgl'
        printer.indentation = indentation
        printer.indentation_increment = '\t'
        printer.line_between_object = 0
        if referencedir:
            printer.reference_dir = referencedir
        for i in range(nbcurrent):
            cmat = colorlist[i]
            if ( (i >= nbdefault) or 
                (cmat.isTexture()) or
                (not cmat.isSimilar(defaultlist[i])) or 
                (cmat.name != defaultlist[i].name)):
                if cmat.isTexture() or not cmat.isSimilar(defaultmat):
                    if firstcol :
                        init_txt += indentation+"import openalea.plantgl.all as pgl\n"
                        firstcol = False
                    cmat.name = 'Color_'+str(i)
                    cmat.apply(printer)
                    init_txt += printer.str()
                    printer.clear()
                    init_txt += indentation+'context.turtle.setMaterial('+repr(i)+','+str(cmat.name)+')\n'
    return init_txt
示例#2
0
    def _generate_colors_py_code(self, indentation = '\t', reference_dir = None, version = default_lpycode_version):
        from openalea.plantgl.all import Material, PglTurtle, PyStrPrinter
        if self.color_list is None: return ''

        init_txt = ''
        nbcurrent = len(self.color_list)

        printer = PyStrPrinter()
        printer.pglnamespace = 'pgl'
        printer.indentation = indentation
        printer.indentation_increment = '\t'
        printer.line_between_object = 0
        if reference_dir and len(reference_dir) > 0:
            printer.reference_dir = os.path.abspath(reference_dir)

        firstcol = True
        for i, cmat in self.color_list.items():
            if not isSimilarToDefaultTurtleMat(cmat, i):
                if firstcol :
                    init_txt += indentation+"import openalea.plantgl.all as pgl\n"
                    firstcol = False
                if cmat.name == '':
                    cmat.name = 'Color_'+str(i)
                cmat.apply(printer)
                init_txt += printer.str()
                printer.clear()
                init_txt += indentation+'context.turtle.setMaterial('+repr(i)+','+str(cmat.name)+')\n'
        return init_txt
示例#3
0
 def writeObject(self,obj,indentation):
     printer = PyStrPrinter()
     printer.pglnamespace = 'pgl'
     printer.indentation = indentation
     printer.line_between_object = 0
     obj.apply(printer)
     return printer.str()
     
示例#4
0
def colorListCode(colorlist = None, referencedir = None, indentation = '\t'):
    init_txt = ''
    if not colorlist is None and len(colorlist) > 0:
        defaultlist = PglTurtle().getColorList()
        nbdefault = len(defaultlist)
        nbcurrent = len(colorlist)
        firstcol = True
        defaultmat = Material('default')
        printer = PyStrPrinter()
        printer.pglnamespace = 'pgl'
        printer.indentation = indentation
        printer.indentation_increment = '\t'
        printer.line_between_object = 0
        if referencedir:
            printer.reference_dir = referencedir
        for i in xrange(nbcurrent):
            cmat = colorlist[i]
            if ( (i >= nbdefault) or 
                (cmat.isTexture()) or
                (not cmat.isSimilar(defaultlist[i])) or 
                (cmat.name != defaultlist[i].name)):
                if cmat.isTexture() or not cmat.isSimilar(defaultmat):
                    if firstcol :
                        init_txt += indentation+"import openalea.plantgl.all as pgl\n"
                        firstcol = False
                    cmat.name = 'Color_'+str(i)
                    cmat.apply(printer)
                    init_txt += printer.str()
                    printer.clear()
                    init_txt += indentation+'context.turtle.setMaterial('+repr(i)+','+str(cmat.name)+')\n'
    return init_txt
示例#5
0
 def writeObject(self, obj, indentation):
     printer = PyStrPrinter()
     printer.pglnamespace = 'pgl'
     printer.indentation = indentation
     printer.line_between_object = 0
     obj.apply(printer)
     return printer.str()
示例#6
0
    def initialisationFunction(self, withall=True):
        header = "def " + LsysContext.InitialisationFunctionName + "(context):\n"
        init_txt = ""
        if withall:
            defaultlist = PglTurtle().getColorList()
            currentlist = self.lsystem.context().turtle.getColorList()
            nbdefault = len(defaultlist)
            nbcurrent = len(currentlist)
            firstcol = True
            defaultmat = Material("default")
            printer = PyStrPrinter()
            printer.pglnamespace = "pgl"
            printer.indentation = "\t"
            printer.indentation_increment = "\t"
            printer.line_between_object = 0
            if self.fname and len(self.fname) > 0:
                printer.reference_dir = os.path.abspath(os.path.dirname(self.getStrFname()))
                # print printer.reference_dir
            for i in xrange(nbcurrent):
                cmat = currentlist[i]
                if (
                    (i >= nbdefault)
                    or (cmat.isTexture())
                    or (not cmat.isSimilar(defaultlist[i]))
                    or (cmat.name != defaultlist[i].name)
                ):
                    if cmat.isTexture() or not cmat.isSimilar(defaultmat):
                        if firstcol:
                            init_txt += "\timport openalea.plantgl.all as pgl\n"
                            firstcol = False
                        cmat.name = "Color_" + str(i)
                        cmat.apply(printer)
                        init_txt += printer.str()
                        printer.clear()
                        init_txt += "\tcontext.turtle.setMaterial(" + repr(i) + "," + str(cmat.name) + ")\n"
            if not self.lsystem.context().is_animation_timestep_to_default():
                init_txt += "\tcontext.animation_timestep = " + str(self.getTimeStep()) + "\n"
            options = self.lsystem.context().options
            for i in xrange(len(options)):
                if not options[i].isToDefault():
                    init_txt += (
                        "\tcontext.options.setSelection("
                        + repr(options[i].name)
                        + ","
                        + str(options[i].selection)
                        + ")\n"
                    )
        if len(self.scalars):
            init_txt += "\tscalars = " + str([i.tostr() for i in self.scalars]) + "\n"
            init_txt += '\tcontext["__scalars__"] = scalars\n'
            init_txt += '\tfor s in scalars:\n\t\tif not s[1] == "Category" : context[s[0]] = s[2]\n'

        def emptyparameterset(params):
            for panel, data in params:
                if len(data) > 0:
                    return False
            return True

        if not emptyparameterset(self.visualparameters):
            intialized_managers = {}
            panelid = 0
            for panelinfo, objects in self.visualparameters:
                if panelinfo.get("active", True) or withall:
                    for manager, obj in objects:
                        if not intialized_managers.has_key(manager):
                            intialized_managers[manager] = True
                            init_txt += manager.initWriting("\t")
                        init_txt += manager.writeObject(obj, "\t")
                    init_txt += (
                        "\tpanel_"
                        + str(panelid)
                        + " = ("
                        + repr(panelinfo)
                        + ",["
                        + ",".join(
                            [
                                "(" + repr(manager.typename) + "," + manager.getName(obj) + ")"
                                for manager, obj in objects
                            ]
                        )
                        + "])\n"
                    )
                panelid += 1
            init_txt += "\tparameterset = ["
            panelid = 0
            for panelinfo, objects in self.visualparameters:
                if panelinfo.get("active", True) or withall:
                    init_txt += "panel_" + str(panelid) + ","
                panelid += 1
            init_txt += "]\n"
            if withall and self.keepCode_1_0_Compatibility:
                init_txt += '\tcontext["__functions__"] = ['
                for panelinfo, objects in self.visualparameters:
                    if panelinfo.get("active", True):
                        for manager, obj in objects:
                            if manager.typename == "Function":
                                init_txt += "(" + repr(manager.getName(obj)) + "," + manager.getName(obj) + "),"
                init_txt += "]\n"
                init_txt += '\tcontext["__curves__"] = ['
                for panelinfo, objects in self.visualparameters:
                    if panelinfo.get("active", True):
                        for manager, obj in objects:
                            if manager.typename == "Curve2D":
                                init_txt += "(" + repr(manager.getName(obj)) + "," + manager.getName(obj) + "),"
                init_txt += "]\n"

            init_txt += '\tcontext["__parameterset__"] = parameterset\n'
            for panelinfo, objects in self.visualparameters:
                if panelinfo.get("active", True):
                    for manager, obj in objects:
                        init_txt += (
                            '\tcontext["'
                            + manager.getName(obj)
                            + '"] = '
                            + manager.writeObjectToLsysContext(obj)
                            + "\n"
                        )
        if len(init_txt) > 0:
            return header + init_txt
        else:
            return ""
示例#7
0
文件: simulation.py 项目: Shoko84/lpy
 def initialisationFunction(self,withall=True):
     header = "def "+LsysContext.InitialisationFunctionName+"(context):\n"
     init_txt = ''
     if withall:
         defaultlist = PglTurtle().getColorList()
         currentlist = self.lsystem.context().turtle.getColorList()
         nbdefault = len(defaultlist)
         nbcurrent = len(currentlist)
         firstcol = True
         defaultmat = Material('default')
         printer = PyStrPrinter()
         printer.pglnamespace = 'pgl'
         printer.indentation = '\t'
         printer.indentation_increment = '\t'
         printer.line_between_object = 0
         if self.fname and len(self.fname) > 0:
             printer.reference_dir = os.path.abspath(os.path.dirname(self.getStrFname()))
             #print printer.reference_dir
         for i in xrange(nbcurrent):
             cmat = currentlist[i]
             if ( (i >= nbdefault) or 
                 (cmat.isTexture()) or
                 (not cmat.isSimilar(defaultlist[i])) or 
                 (cmat.name != defaultlist[i].name)):
                 if cmat.isTexture() or not cmat.isSimilar(defaultmat):
                     if firstcol :
                         init_txt += "\timport openalea.plantgl.all as pgl\n"
                         firstcol = False
                     cmat.name = 'Color_'+str(i)
                     cmat.apply(printer)
                     init_txt += printer.str()
                     printer.clear()
                     init_txt += '\tcontext.turtle.setMaterial('+repr(i)+','+str(cmat.name)+')\n'
         if not self.lsystem.context().is_animation_timestep_to_default():
             init_txt += '\tcontext.animation_timestep = '+str(self.getTimeStep())+'\n'           
         options = self.lsystem.context().options
         for i in xrange(len(options)):
             if not options[i].isToDefault():
                 init_txt += '\tcontext.options.setSelection('+repr(options[i].name)+','+str(options[i].selection)+')\n'
     if len(self.scalars):
         init_txt += '\tscalars = '+str([i.tostr() for i in self.scalars])+'\n'
         init_txt += '\tcontext["__scalars__"] = scalars\n'
         init_txt += '\tfor s in scalars:\n\t\tif not s[1] == "Category" : context[s[0]] = s[2]\n'
     def emptyparameterset(params):
         for panel,data in params:
             if len(data) > 0: return False
         return True
     if not emptyparameterset(self.visualparameters) :
         intialized_managers = {}
         panelid = 0
         for panelinfo,objects in self.visualparameters:
             if panelinfo.get('active',True) or withall:
                 for manager,obj in objects:
                     if not intialized_managers.has_key(manager):
                         intialized_managers[manager] = True
                         init_txt += manager.initWriting('\t') 
                     init_txt += manager.writeObject(obj,'\t')
                 init_txt += '\tpanel_'+str(panelid)+' = ('+repr(panelinfo)+',['+','.join(['('+repr(manager.typename)+','+manager.getName(obj)+')' for manager,obj in objects])+'])\n'
             panelid += 1    
         init_txt += '\tparameterset = ['
         panelid = 0
         for panelinfo,objects in self.visualparameters:
             if panelinfo.get('active',True) or withall:
                 init_txt += 'panel_'+str(panelid)+','
             panelid += 1
         init_txt += ']\n'
         if withall and self.keepCode_1_0_Compatibility:
             init_txt += '\tcontext["__functions__"] = ['
             for panelinfo,objects in self.visualparameters:
                 if panelinfo.get('active',True):
                     for manager,obj in objects:
                         if manager.typename == 'Function':
                             init_txt += '('+repr(manager.getName(obj))+','+manager.getName(obj)+'),'
             init_txt += ']\n'
             init_txt += '\tcontext["__curves__"] = ['
             for panelinfo,objects in self.visualparameters:
                 if panelinfo.get('active',True):
                     for manager,obj in objects:
                         if manager.typename == 'Curve2D':
                             init_txt += '('+repr(manager.getName(obj))+','+manager.getName(obj)+'),'
             init_txt += ']\n'
             
         init_txt += '\tcontext["__parameterset__"] = parameterset\n'
         for panelinfo,objects in self.visualparameters:
             if panelinfo.get('active',True):
                 for manager,obj in objects:
                     init_txt += '\tcontext["'+manager.getName(obj)+'"] = '+manager.writeObjectToLsysContext(obj) + '\n'
     if len(init_txt) > 0:
         return header+init_txt
     else:
         return ''