Last active
May 5, 2022 11:03
-
-
Save 5agado/7cf4ae0f1ba9f78fa904aa86707930a2 to your computer and use it in GitHub Desktop.
Init method for Blender 2.8 Grease Pencil
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import bpy | |
def get_grease_pencil(gpencil_obj_name='GPencil') -> bpy.types.GreasePencil: | |
""" | |
Return the grease-pencil object with the given name. Initialize one if not already present. | |
:param gpencil_obj_name: name/key of the grease pencil object in the scene | |
""" | |
# If not present already, create grease pencil object | |
if gpencil_obj_name not in bpy.context.scene.objects: | |
bpy.ops.object.gpencil_add(view_align=False, location=(0, 0, 0), type='EMPTY') | |
# rename grease pencil | |
bpy.context.scene.objects[-1].name = gpencil_obj_name | |
# Get grease pencil object | |
gpencil = bpy.context.scene.objects[gpencil_obj_name] | |
return gpencil | |
def get_grease_pencil_layer(gpencil: bpy.types.GreasePencil, gpencil_layer_name='GP_Layer', | |
clear_layer=False) -> bpy.types.GPencilLayer: | |
""" | |
Return the grease-pencil layer with the given name. Create one if not already present. | |
:param gpencil: grease-pencil object for the layer data | |
:param gpencil_layer_name: name/key of the grease pencil layer | |
:param clear_layer: whether to clear all previous layer data | |
""" | |
# Get grease pencil layer or create one if none exists | |
if gpencil.data.layers and gpencil_layer_name in gpencil.data.layers: | |
gpencil_layer = gpencil.data.layers[gpencil_layer_name] | |
else: | |
gpencil_layer = gpencil.data.layers.new(gpencil_layer_name, set_active=True) | |
if clear_layer: | |
gpencil_layer.clear() # clear all previous layer data | |
# bpy.ops.gpencil.paintmode_toggle() # need to trigger otherwise there is no frame | |
return gpencil_layer | |
# Util for default behavior merging previous two methods | |
def init_grease_pencil(gpencil_obj_name='GPencil', gpencil_layer_name='GP_Layer', | |
clear_layer=True) -> bpy.types.GPencilLayer: | |
gpencil = get_grease_pencil(gpencil_obj_name) | |
gpencil_layer = get_grease_pencil_layer(gpencil, gpencil_layer_name, clear_layer=clear_layer) | |
return gpencil_layer |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment