Newer
Older
# SPDX-License-Identifier: GPL-2.0-or-later
# ----------------------------------------------------------
# Author: Antonio Vazquez (antonioya)
# ----------------------------------------------------------
# ----------------------------------------------
# Define Addon info
# ----------------------------------------------
bl_info = {
"name": "MeasureIt",
"author": "Antonio Vazquez (antonioya)",
"version": (1, 8, 2),
"blender": (3, 0, 0),
"description": "Tools for measuring objects.",
"doc_url": "{BLENDER_MANUAL_URL}/addons/3d_view/measureit.html",
# ----------------------------------------------
# Import modules
# ----------------------------------------------
if "bpy" in locals():
importlib.reload(measureit_main)
# print("measureit: Reloaded multifiles")
# print("measureit: Imported multifiles")
# noinspection PyUnresolvedReferences
import bpy
Scene,
WindowManager,
)
from bpy.props import (
FloatVectorProperty,
IntProperty,
BoolProperty,
StringProperty,
FloatProperty,
EnumProperty,
)
# --------------------------------------------------------------
# Register all operators and panels
# --------------------------------------------------------------
# Add-ons Preferences Update Panel
# Define Panel classes for updating
panels = (
measureit_main.MEASUREIT_PT_Edit,
measureit_main.MEASUREIT_PT_Main,
measureit_main.MEASUREIT_PT_Conf,
measureit_main.MEASUREIT_PT_Render,
def update_panel(self, context):
message = "MeasureIt: Updating Panel locations has failed"
for panel in panels:
if "bl_rna" in panel.__dict__:
bpy.utils.unregister_class(panel)
for panel in panels:
panel.bl_category = context.preferences.addons[__name__].preferences.category
bpy.utils.register_class(panel)
except Exception as e:
print("\n[{}]\n{}\n\nError:\n{}".format(__name__, message, e))
class Measure_Pref(AddonPreferences):
# this must match the addon name, use '__package__'
# when defining this in a submodule of a python package.
name="Tab Category",
description="Choose a name for the category of the panel",
default="Display",
update=update_panel
)
def draw(self, context):
layout = self.layout
row = layout.row()
col = row.column()
col.label(text="Tab Category:")
col.prop(self, "category", text="")
# Define menu
# noinspection PyUnusedLocal
classes = (
measureit_main.MEASUREIT_OT_RunHintDisplay,
measureit_main.MEASUREIT_OT_AddSegment,
measureit_main.MEASUREIT_OT_AddArea,
measureit_main.MEASUREIT_OT_AddSegmentOrto,
measureit_main.MEASUREIT_OT_AddAngle,
measureit_main.MEASUREIT_OT_AddArc,
measureit_main.MEASUREIT_OT_AddLabel,
measureit_main.MEASUREIT_OT_AddNote,
measureit_main.MEASUREIT_OT_AddLink,
measureit_main.MEASUREIT_OT_AddOrigin,
measureit_main.MEASUREIT_OT_DeleteSegment,
measureit_main.MEASUREIT_OT_DeleteAllSegment,
measureit_main.MEASUREIT_OT_DeleteAllSum,
measureit_main.MEASUREIT_OT_RenderSegment,
measureit_main.MEASUREIT_OT_ExpandAllSegment,
measureit_main.MEASUREIT_OT_CollapseAllSegment,
measureit_main.MEASUREIT_PT_Main,
measureit_main.MEASUREIT_PT_Edit,
measureit_main.MEASUREIT_PT_Conf,
measureit_main.MEASUREIT_PT_Render,
# Measure_Pref,
)
def register():
from bpy.utils import register_class
for cls in classes:
register_class(cls)
# Define properties
Scene.measureit_default_color = FloatVectorProperty(
name="Default color",
description="Default Color",
default=(0.173, 0.545, 1.0, 1.0),
min=0.1,
max=1,
subtype='COLOR',
size=4)
Scene.measureit_font_size = IntProperty(name="Text Size",
description="Default text size",
default=14, min=10, max=150)
Scene.measureit_hint_space = FloatProperty(name='Separation', min=0, max=100, default=0.1,
precision=3,
description="Default distance to display measure")
Scene.measureit_gl_ghost = BoolProperty(name="All",
description="Display measures for all objects,"
" not only selected",
default=True)
Scene.measureit_gl_txt = StringProperty(name="Text", maxlen=256,
description="Short description (use | for line break)")
Scene.measureit_gl_precision = IntProperty(name='Precision', min=0, max=5, default=2,
Scene.measureit_gl_show_d = BoolProperty(name="ShowDist",
Scene.measureit_gl_show_n = BoolProperty(name="ShowName",
Scene.measureit_scale = BoolProperty(name="Scale",
Scene.measureit_scale_factor = FloatProperty(name='Factor', min=0.001, max=9999999,
default=1.0,
precision=3,
description="Scale factor 1:x")
Scene.measureit_scale_color = FloatVectorProperty(name="Scale color",
description="Scale Color",
default=(1, 1, 0, 1.0),
min=0.1,
max=1,
subtype='COLOR',
size=4)
Scene.measureit_scale_font = IntProperty(name="Font",
description="Text size",
default=14, min=10, max=150)
Scene.measureit_scale_pos_x = IntProperty(name="X Position",
description="Margin on the X axis",
default=5,
min=0,
max=100)
Scene.measureit_scale_pos_y = IntProperty(name="Y Position",
description="Margin on the Y axis",
default=5,
min=0,
max=100)
Scene.measureit_gl_scaletxt = StringProperty(name="ScaleText", maxlen=48,
Scene.measureit_scale_precision = IntProperty(name='Precision', min=0, max=5, default=0,
Scene.measureit_ovr = BoolProperty(name="Override",
description="Override colors and fonts",
default=False)
Scene.measureit_ovr_font = IntProperty(name="Font",
description="Override text size",
default=14, min=10, max=150)
Scene.measureit_ovr_color = FloatVectorProperty(name="Override color",
description="Override Color",
default=(1, 0, 0, 1.0),
min=0.1,
max=1,
subtype='COLOR',
size=4)
Scene.measureit_ovr_width = IntProperty(name='Override width', min=1, max=10, default=1,
Scene.measureit_ovr_font_rotation = IntProperty(name='Rotate', min=0, max=360, default=0,
description="Text rotation in degrees")
Scene.measureit_ovr_font_align = EnumProperty(items=(('L', "Left Align", "Use current render"),
('C', "Center Align", ""),
('R', "Right Align", "")),
name="Align Font",
description="Set Font Alignment")
Scene.measureit_units = EnumProperty(items=(('1', "Automatic", "Use scene units"),
('4', "Millimeters", ""),
('5', "Feet", ""),
('6', "Inches", "")),
name="Units",
default="2",
description="Units")
Scene.measureit_hide_units = BoolProperty(name="hide_units",
description="Do not display unit of measurement on viewport",
default=False)
Scene.measureit_render = BoolProperty(name="Render",
description="Save an image with measures over"
" render image",
default=False)
Scene.measureit_render_type = EnumProperty(items=(('1', "Frame", "Render current frame"),
('2', "Animation", "")),
name="Render type",
description="Type of render image")
Scene.measureit_sum = EnumProperty(items=(('99', "-", "Select a group for sum"),
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
('0', "A", ""),
('1', "B", ""),
('2', "C", ""),
('3', "D", ""),
('4', "E", ""),
('5', "F", ""),
('6', "G", ""),
('7', "H", ""),
('8', "I", ""),
('9', "J", ""),
('10', "K", ""),
('11', "L", ""),
('12', "M", ""),
('13', "N", ""),
('14', "O", ""),
('15', "P", ""),
('16', "Q", ""),
('17', "R", ""),
('18', "S", ""),
('19', "T", ""),
('20', "U", ""),
('21', "V", ""),
('22', "W", ""),
('23', "X", ""),
('24', "Y", ""),
('25', "Z", "")),
name="Sum in Group",
description="Add segment length in selected group")
Scene.measureit_rf = BoolProperty(name="render_frame",
description="Add a frame in render output",
default=False)
Scene.measureit_rf_color = FloatVectorProperty(name="Fcolor",
description="Frame Color",
default=(0.9, 0.9, 0.9, 1.0),
min=0.1,
max=1,
subtype='COLOR',
size=4)
Scene.measureit_rf_border = IntProperty(name='fborder ', min=1, max=1000, default=10,
Scene.measureit_rf_line = IntProperty(name='fline', min=1, max=10, default=1,
Scene.measureit_glarrow_a = EnumProperty(items=(('99', "--", "No arrow"),
('1', "Line",
"The point of the arrow are lines"),
('2', "Triangle",
"The point of the arrow is triangle"),
('3', "TShape",
"The point of the arrow is a T")),
name="A end",
description="Add arrows to point A")
Scene.measureit_glarrow_b = EnumProperty(items=(('99', "--", "No arrow"),
('1', "Line",
"The point of the arrow are lines"),
('2', "Triangle",
"The point of the arrow is triangle"),
('3', "TShape",
"The point of the arrow is a T")),
name="B end",
description="Add arrows to point B")
Scene.measureit_glarrow_s = IntProperty(name="Size",
description="Arrow size",
default=15, min=6, max=500)
Scene.measureit_debug = BoolProperty(name="Debug",
description="Display information for debugging"
Scene.measureit_debug_select = BoolProperty(name="Selected",
Scene.measureit_debug_vertices = BoolProperty(name="Vertices",
description="Display vertex index number",
Scene.measureit_debug_objects = BoolProperty(name="Objects",
description="Display object scene index number",
default=False)
Scene.measureit_debug_vert_loc = BoolProperty(name="Location",
description="Display vertex location",
default=False)
Scene.measureit_debug_object_loc = BoolProperty(name="Location",
description="Display object location",
default=False)
Scene.measureit_debug_edges = BoolProperty(name="Edges",
description="Display edge index number",
default=False)
Scene.measureit_debug_faces = BoolProperty(name="Faces",
description="Display face index number",
Scene.measureit_debug_normals = BoolProperty(name="Normals",
description="Display face normal "
"vector and creation order",
default=False)
Scene.measureit_debug_normal_details = BoolProperty(name="Details",
description="Display face normal details",
default=True)
Scene.measureit_debug_font = IntProperty(name="Font",
description="Debug text size",
default=14, min=10, max=150)
Scene.measureit_debug_vert_color = FloatVectorProperty(name="Debug color",
description="Debug Color",
default=(1, 0, 0, 1.0),
min=0.1,
max=1,
subtype='COLOR',
size=4)
Scene.measureit_debug_face_color = FloatVectorProperty(name="Debug face color",
description="Debug face Color",
default=(0, 1, 0, 1.0),
min=0.1,
max=1,
subtype='COLOR',
size=4)
Scene.measureit_debug_norm_color = FloatVectorProperty(name="Debug vector color",
description="Debug vector Color",
default=(1.0, 1.0, 0.1, 1.0),
min=0.1,
max=1,
subtype='COLOR',
size=4)
Scene.measureit_debug_edge_color = FloatVectorProperty(name="Debug vector color",
description="Debug vector Color",
default=(0.1, 1.0, 1.0, 1.0),
min=0.1,
max=1,
subtype='COLOR',
size=4)
Scene.measureit_debug_obj_color = FloatVectorProperty(name="Debug vector color",
description="Debug vector Color",
default=(1.0, 1.0, 1.0, 1.0),
min=0.1,
max=1,
subtype='COLOR',
size=4)
Scene.measureit_debug_normal_size = FloatProperty(name='Len', min=0.001, max=9,
default=0.5,
precision=2,
description="Normal arrow size")
Scene.measureit_debug_width = IntProperty(name='Debug width', min=1, max=10, default=2,
Scene.measureit_debug_precision = IntProperty(name='Precision', min=0, max=5, default=1,
Scene.measureit_debug_vert_loc_toggle = EnumProperty(items=(('1', "Local",
"Uses local coordinates"),
('2', "Global",
"Uses global coordinates")),
name="Coordinates",
description="Choose coordinate system")
Scene.measureit_font_rotation = IntProperty(name='Rotate', min=0, max=360, default=0,
description="Default text rotation in degrees")
Scene.measureit_font_align = EnumProperty(items=(('L', "Left Align", "Use current render"),
('C', "Center Align", ""),
('R', "Right Align", "")),
name="Align Font",
description="Set Font Alignment")
# OpenGL flag
# register internal property
wm.measureit_run_opengl = BoolProperty(default=False)
def unregister():
from bpy.utils import unregister_class
for cls in reversed(classes):
unregister_class(cls)
# Remove properties
del Scene.measureit_default_color
del Scene.measureit_font_size
del Scene.measureit_hint_space
del Scene.measureit_gl_ghost
del Scene.measureit_gl_txt
del Scene.measureit_gl_precision
del Scene.measureit_gl_show_d
del Scene.measureit_gl_show_n
del Scene.measureit_scale
del Scene.measureit_scale_factor
del Scene.measureit_scale_color
del Scene.measureit_scale_font
del Scene.measureit_scale_pos_x
del Scene.measureit_scale_pos_y
del Scene.measureit_gl_scaletxt
del Scene.measureit_scale_precision
del Scene.measureit_ovr
del Scene.measureit_ovr_font
del Scene.measureit_ovr_color
del Scene.measureit_ovr_width
del Scene.measureit_ovr_font_rotation
del Scene.measureit_ovr_font_align
del Scene.measureit_hide_units
del Scene.measureit_render
del Scene.measureit_render_type
del Scene.measureit_sum
del Scene.measureit_rf
del Scene.measureit_rf_color
del Scene.measureit_rf_border
del Scene.measureit_rf_line
del Scene.measureit_glarrow_a
del Scene.measureit_glarrow_b
del Scene.measureit_glarrow_s
del Scene.measureit_debug
del Scene.measureit_debug_select
del Scene.measureit_debug_vertices
del Scene.measureit_debug_objects
del Scene.measureit_debug_edges
del Scene.measureit_debug_faces
del Scene.measureit_debug_normals
del Scene.measureit_debug_normal_details
del Scene.measureit_debug_font
del Scene.measureit_debug_vert_color
del Scene.measureit_debug_face_color
del Scene.measureit_debug_norm_color
del Scene.measureit_debug_edge_color
del Scene.measureit_debug_obj_color
del Scene.measureit_debug_normal_size
del Scene.measureit_debug_width
del Scene.measureit_debug_precision
del Scene.measureit_debug_vert_loc
del Scene.measureit_debug_object_loc
del Scene.measureit_debug_vert_loc_toggle
del Scene.measureit_font_rotation
del Scene.measureit_font_align
# remove OpenGL data
measureit_main.MEASUREIT_OT_RunHintDisplay.handle_remove(measureit_main.MEASUREIT_OT_RunHintDisplay, bpy.context)
wm = bpy.context.window_manager
p = 'measureit_run_opengl'
if p in wm:
del wm[p]
if __name__ == '__main__':
register()