Exemplo n.º 1
0
 def __init__(self):        
     self.valid_lighting = False
     
     self.ObjectsChecked = ExportCache("Objects")
     self.LampsChecked = ExportCache("Lamps")
     self.MaterialsChecked = ExportCache("Materials")
     self.CheckedDuplis = ExportCache("Duplis")
Exemplo n.º 2
0
 def __init__(self):        
     self.valid_lighting = False
     
     self.ObjectsChecked = ExportCache("Objects")
     self.LampsChecked = ExportCache("Lamps")
     self.MaterialsChecked = ExportCache("Materials")
     self.CheckedDuplis = ExportCache("Duplis")
Exemplo n.º 3
0
class LightingChecker(SceneIterator):
    progress_thread_action = "Checking"
    
    def __init__(self):        
        self.valid_lighting = False
        
        self.ObjectsChecked = ExportCache("Objects")
        self.LampsChecked = ExportCache("Lamps")
        self.MaterialsChecked = ExportCache("Materials")
        self.CheckedDuplis = ExportCache("Duplis")
    
    def isValid(self):
        return self.valid_lighting
    
    def handleDuplis(self, obj, particle_system=None):
        if self.CheckedDuplis.have(obj): return
        self.CheckedDuplis.add(obj, obj)
        
        try:
            obj.dupli_list_create(self.scene, 'RENDER')
            if not obj.dupli_list:
                raise Exception('cannot create dupli list for object %s' % obj.name)
        except Exception as err:
            indigo_log('%s'%err)
            return
        
        for dupli_ob in obj.dupli_list:
            if dupli_ob.object.type not in self.supported_mesh_types:
                continue
            if not indigo_visible(self.scene, dupli_ob.object, is_dupli=True):
                continue
            
            self.handleMesh(dupli_ob.object)
        
        obj.dupli_list_clear()
    
    def handleMesh(self, obj):
        if self.ObjectsChecked.have(obj): return
        
        emitting_object = False
        
        for ms in obj.material_slots:
            if self.MaterialsChecked.have(ms.material): continue
            self.MaterialsChecked.add(ms.material, ms.material)
            
            if ms.material == None: continue
            if ms.material.indigo_material == None: continue
            
            iem = ms.material.indigo_material.indigo_material_emission
            mat_test = iem.emission_enabled
            if iem.emission_enabled:
                mat_test &= self.check_spectrum(iem, 'emission')
                if iem.emission_scale:
                    mat_test &= (iem.emission_scale_value > 0.0)
                else:
                    mat_test &= (iem.emit_power > 0.0 and iem.emit_gain_val > 0.0)
                mat_test &= self.scene.indigo_lightlayers.is_enabled(iem.emit_layer)
                mat_test &= self.scene.indigo_lightlayers.gain_for_layer(iem.emit_layer) > 0.0
            emitting_object |= mat_test
        
        self.ObjectsChecked.add(obj, obj)
        self.valid_lighting |= emitting_object
    
    def handleLamp(self, obj):
        if self.LampsChecked.have(obj): return
        
        self.valid_lighting |= obj.data.type in ('SUN', 'HEMI')
        self.LampsChecked.add(obj, obj)
        
    def check_spectrum(self, obj, prefix):
            valid_sp = False
            sp_type = getattr(obj, '%s_SP_type' % prefix)
            if sp_type == 'uniform':
                valid_sp = getattr(obj, '%s_SP_uniform_val' % prefix) > 0.0
            elif sp_type == 'rgb':
                valid_sp = getattr(obj, '%s_SP_rgb' % prefix).v > 0.0
            elif sp_type == 'blackbody':
                valid_sp = getattr(obj, '%s_SP_blackbody_gain' % prefix) > 0.0
            return valid_sp
    
    def canAbort(self):
        return self.valid_lighting
Exemplo n.º 4
0
class LightingChecker(SceneIterator):
    progress_thread_action = "Checking"
    
    def __init__(self):        
        self.valid_lighting = False
        
        self.ObjectsChecked = ExportCache("Objects")
        self.LampsChecked = ExportCache("Lamps")
        self.MaterialsChecked = ExportCache("Materials")
        self.CheckedDuplis = ExportCache("Duplis")
    
    def isValid(self):
        return self.valid_lighting
    
    def handleDuplis(self, obj, particle_system=None):
        if self.CheckedDuplis.have(obj): return
        self.CheckedDuplis.add(obj, obj)
        
        try:
            obj.dupli_list_create(self.scene, 'RENDER')
            if not obj.dupli_list:
                raise Exception('cannot create dupli list for object %s' % obj.name)
        except Exception as err:
            indigo_log('%s'%err)
            return
        
        for dupli_ob in obj.dupli_list:
            if dupli_ob.object.type not in self.supported_mesh_types:
                continue
            if not indigo_visible(self.scene, dupli_ob.object, is_dupli=True):
                continue
            
            self.handleMesh(dupli_ob.object)
        
        obj.dupli_list_clear()
    
    def handleMesh(self, obj):
        if self.ObjectsChecked.have(obj): return
        
        emitting_object = False
        
        for ms in obj.material_slots:
            if self.MaterialsChecked.have(ms.material): continue
            self.MaterialsChecked.add(ms.material, ms.material)
            
            if ms.material == None: continue
            if ms.material.indigo_material == None: continue
            
            iem = ms.material.indigo_material.indigo_material_emission
            mat_test = iem.emission_enabled
            if iem.emission_enabled:
                mat_test &= self.check_spectrum(iem, 'emission')
                if iem.emission_scale:
                    mat_test &= (iem.emission_scale_value > 0.0)
                else:
                    mat_test &= (iem.emit_power > 0.0 and iem.emit_gain_val > 0.0)
                mat_test &= self.scene.indigo_lightlayers.is_enabled(iem.emit_layer)
                mat_test &= self.scene.indigo_lightlayers.gain_for_layer(iem.emit_layer) > 0.0
            emitting_object |= mat_test
        
        self.ObjectsChecked.add(obj, obj)
        self.valid_lighting |= emitting_object
    
    def handleLamp(self, obj):
        if self.LampsChecked.have(obj): return
        
        self.valid_lighting |= obj.data.type in ('SUN', 'HEMI')
        self.LampsChecked.add(obj, obj)
        
    def check_spectrum(self, obj, prefix):
            valid_sp = False
            sp_type = getattr(obj, '%s_SP_type' % prefix)
            if sp_type == 'uniform':
                valid_sp = getattr(obj, '%s_SP_uniform_val' % prefix) > 0.0
            elif sp_type == 'rgb':
                valid_sp = getattr(obj, '%s_SP_rgb' % prefix).v > 0.0
            elif sp_type == 'blackbody':
                valid_sp = getattr(obj, '%s_SP_blackbody_gain' % prefix) > 0.0
            return valid_sp
    
    def canAbort(self):
        return self.valid_lighting