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)