Skip to content
Snippets Groups Projects
utils.py 2.4 KiB
Newer Older
  • Learn to ignore specific revisions
  • #  This program is free software; you can redistribute it and/or
    #  modify it under the terms of the GNU General Public License
    #  as published by the Free Software Foundation; either version 2
    #  of the License, or (at your option) any later version.
    #
    #  This program is distributed in the hope that it will be useful,
    #  but WITHOUT ANY WARRANTY; without even the implied warranty of
    #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    #  GNU General Public License for more details.
    #
    #  You should have received a copy of the GNU General Public License
    #  along with this program; if not, write to the Free Software Foundation,
    #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
    
    import bpy
    
    
    # FUNCTION: Checks if cycles is available
    def cycles_exists():
        return hasattr(bpy.types.Scene, "cycles")
    
    
    # FUNCTION: Checks if cycles is the active renderer
    def cycles_active(context):
        return context.scene.render.engine == "CYCLES"
    
    
    # FUNCTION: Check if material has Emission (for select and stats)
    def cycles_is_emission(context, ob):
        is_emission = False
    
        if not ob.material_slots:
            return is_emission
    
        for ma in ob.material_slots:
            if not ma.material:
                continue
            if ma.material.node_tree and ma.material.node_tree.nodes:
                for no in ma.material.node_tree.nodes:
                    if not no.type in ("EMISSION", "GROUP"):
                        continue
                    for ou in no.outputs:
                        if not ou.links:
                            continue
                        if no.type == "GROUP" and no.node_tree and no.node_tree.nodes:
                            for gno in no.node_tree.nodes:
                                if gno.type != "EMISSION":
                                    continue
                                for gou in gno.outputs:
                                    if ou.links and gou.links:
                                        is_emission = True
                        elif no.type == "EMISSION":
                            if ou.links:
                                is_emission = True
        return is_emission
    
    
    # FUNCTION: Check if object has keyframes for a specific frame
    def is_keyframe(ob, frame):
        if ob is not None and ob.animation_data is not None and ob.animation_data.action is not None:
            for fcu in ob.animation_data.action.fcurves:
                if frame in (p.co.x for p in fcu.keyframe_points):
                    return True
        return False