BluePrint add on to blender

@sagado

Can You help maybe with script that creating blue print by scripts?
I’m thinking to “hang-on” the greace pencile object with text to camera object to have constant camera distance in case operations around camera for viewport perspective with “product”.

import bpy

bpy.ops.object.gpencil_add(align='WORLD', location=(0, 0, 0), scale=(1, 1, 1), type='EMPTY')

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

def draw_line(gp_frame, p0: tuple, p1: tuple):
    # Init new stroke
    gp_stroke = gp_frame.strokes.new()
    gp_stroke.display_mode = '3DSPACE'  # allows for editing

    # Define stroke geometry
    gp_stroke.points.add(count=2)
    gp_stroke.points[0].co = p0
    gp_stroke.points[1].co = p1
    return gp_stroke

gp_layer = init_grease_pencil()
gp_frame = gp_layer.frames.new(0)

#gp_stroke.line_width = 10
#gp_stroke.material_index = 1

def draw_sq_():
    draw_line(gp_frame, (0, 0, 0), (0, 1, 0))
    draw_line(gp_frame, (0, 0, 0), (0.5, 0, 0))
    draw_line(gp_frame, (0.5, 0, 0), (0.5, 1, 0)) 
    draw_line(gp_frame, (0, 1, 0), (0.5, 1, 0)) 

def draw_sq(a, b):
    draw_line(gp_frame, (0, 0, 0), (0, a, 0))
    draw_line(gp_frame, (0, 0, 0), (b, 0, 0))
    draw_line(gp_frame, (b, 0, 0), (b, a, 0)) 
    draw_line(gp_frame, (0, a, 0), (b, a, 0)) 
    
a = 0.5
b = 1
draw_sq(a,b)
draw_sq(a,b*2)
draw_sq(a*2,b*2)
draw_sq(a*2,b)

project_title = bpy.data.curves.new(type="FONT", name="Project_Title")
project_title.body = "Project Title"
project_title = bpy.data.objects.new(name="Project_Title", object_data=project_title)
#project_title = bpy.data.objects.location=(1,0,0)
#font_obj.transform.resize(value=(1.5, 0.5, 0.5))
bpy.context.scene.collection.objects.link(project_title) 

#project_author = bpy.data.curves.new(type="FONT", name="Project_Author")
#project_author.body = "Project Author"
#project_author = bpy.data.objects.new(name="Project_Author", object_data=project_author)
#project_title = bpy.data.objects.location=(1,0,0)
#font_obj.transform.resize(value=(1.5, 0.5, 0.5))
#bpy.context.scene.collection.objects.link(project_author)