OverviewFilesCommitsIssuesDocsReleasesPeers

hardops / arcade / engine / drawing / hops_logo.py

77 lines · python ref:
import bpy
import gpu
from gpu_extras.batch import batch_for_shader
from mathutils import Vector
from .... utils.blender_ui import get_dpi_factor
from .... utility import addon


def draw_arcade_hops_logo(color=(0,0,0,.5), size=100, x=100, y=100):
    '''Draw the hops logo.\n
    Notes: Max Width = 10px, Max Height = 10px'''

    factor = get_dpi_factor()
    d = size * factor

    vertices = (
        (0*d + x, 0*d + y),
        (4*d + x, 0*d + y),
        (4*d + x, 1*d + y),
        (1*d + x, 1*d + y),
        (1*d + x, 4*d + y),
        (0*d + x, 4*d + y),

        (10*d + x, 0*d + y),
        (10*d + x, 4*d + y),
        (9*d + x,  4*d + y),
        (9*d + x,  1*d + y),
        (6*d + x,  1*d + y),
        (6*d + x,  0*d + y),

        (0*d + x, 10*d + y),
        (0*d + x, 6*d + y),
        (1*d + x, 6*d + y),
        (1*d + x, 9*d + y),
        (4*d + x, 9*d + y),
        (4*d + x, 10*d + y),

        (9*d + x,  9*d + y),
        (9*d + x,  6*d + y),
        (10*d + x, 6*d + y),
        (10*d + x, 10*d + y),
        (6*d + x,  10*d + y),
        (6*d + x,  9*d + y),

        (2.5*d + x, 2*d + y),
        (2.5*d + x, 4*d + y),
        (4*d + x,   3.5*d + y),
        (4*d + x,   2*d + y),

        (2.5*d + x, 4*d + y),
        (6*d + x,   7.5*d + y),
        (6.5*d + x, 6*d + y),
        (4*d + x,   3.5*d + y),

        (6*d + x,   7.5*d + y),
        (8*d + x,   7.5*d + y),
        (8*d + x,   6*d + y),
        (6.5*d + x, 6*d + y))

    indices = (
        (0, 1, 2), (2, 3, 0), (0, 4, 3), (0, 5, 4),
        (6, 7, 8), (8, 9, 6), (6, 10, 9), (6, 11, 10),
        (12, 13, 14), (14, 15, 12), (12, 16, 15), (12, 17, 16),
        (18, 19, 20), (20, 21, 18), (18, 22, 21), (18, 23, 22),
        (24, 25, 26), (26, 27, 24),
        (28, 29, 30), (30, 31, 28),
        (32, 33, 34), (34, 35, 32))

    built_in_shader = 'UNIFORM_COLOR' if bpy.app.version[0] >=4 else '2D_UNIFORM_COLOR'
    shader = gpu.shader.from_builtin(built_in_shader)
    batch = batch_for_shader(shader, 'TRIS', {"pos" : vertices}, indices=indices)
    shader.bind()
    shader.uniform_float("color", color)
    gpu.state.blend_set('ALPHA')
    batch.draw(shader)
    gpu.state.blend_set('NONE')