Skip to content
Snippets Groups Projects
__init__.py 24.7 KiB
Newer Older
  • Learn to ignore specific revisions
  • # SPDX-License-Identifier: GPL-2.0-or-later
    
    
    # ----------------------------------------------------------
    # Author: Antonio Vazquez (antonioya)
    # ----------------------------------------------------------
    
    # ----------------------------------------------
    # Define Addon info
    # ----------------------------------------------
    bl_info = {
        "name": "MeasureIt",
        "author": "Antonio Vazquez (antonioya)",
    
    meta-androcto's avatar
    meta-androcto committed
        "location": "View3D > Sidebar > View Tab",
    
        "version": (1, 8, 2),
        "blender": (3, 0, 0),
    
        "description": "Tools for measuring objects.",
    
        "doc_url": "{BLENDER_MANUAL_URL}/addons/3d_view/measureit.html",
    
        "category": "3D View"
    
    Antonioya's avatar
    Antonioya committed
    }
    
    
    
    # ----------------------------------------------
    # Import modules
    # ----------------------------------------------
    if "bpy" in locals():
    
        importlib.reload(measureit_main)
    
        # print("measureit: Reloaded multifiles")
    
        from . import measureit_main
    
        # print("measureit: Imported multifiles")
    
    
    # noinspection PyUnresolvedReferences
    import bpy
    
    from bpy.types import (
    
            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.
    
        bl_idname = __name__
    
    
        category: StringProperty(
    
                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,
    )
    
    
        from bpy.utils import register_class
        for cls in classes:
            register_class(cls)
    
    
        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",
    
    Antonioya's avatar
    Antonioya committed
                                                description="Default text size",
                                                default=14, min=10, max=150)
    
        Scene.measureit_hint_space = FloatProperty(name='Separation', min=0, max=100, default=0.1,
    
    Antonioya's avatar
    Antonioya committed
                                                   precision=3,
                                                   description="Default distance to display measure")
    
        Scene.measureit_gl_ghost = BoolProperty(name="All",
    
    Antonioya's avatar
    Antonioya committed
                                                description="Display measures for all objects,"
                                                            " not only selected",
                                                default=True)
    
        Scene.measureit_gl_txt = StringProperty(name="Text", maxlen=256,
    
    Antonioya's avatar
    Antonioya committed
                                                description="Short description (use | for line break)")
    
        Scene.measureit_gl_precision = IntProperty(name='Precision', min=0, max=5, default=2,
    
    Antonioya's avatar
    Antonioya committed
                                                   description="Number of decimal precision")
    
        Scene.measureit_gl_show_d = BoolProperty(name="ShowDist",
    
    Antonioya's avatar
    Antonioya committed
                                                 description="Display distances",
                                                 default=True)
    
        Scene.measureit_gl_show_n = BoolProperty(name="ShowName",
    
    Antonioya's avatar
    Antonioya committed
                                                 description="Display texts",
                                                 default=False)
    
        Scene.measureit_scale = BoolProperty(name="Scale",
    
    Antonioya's avatar
    Antonioya committed
                                             description="Use scale factor",
                                             default=False)
    
        Scene.measureit_scale_factor = FloatProperty(name='Factor', min=0.001, max=9999999,
    
    Antonioya's avatar
    Antonioya committed
                                                     default=1.0,
                                                     precision=3,
                                                     description="Scale factor 1:x")
    
        Scene.measureit_scale_color = FloatVectorProperty(name="Scale color",
    
    Antonioya's avatar
    Antonioya committed
                                                          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",
    
    Antonioya's avatar
    Antonioya committed
                                                 description="Text size",
                                                 default=14, min=10, max=150)
    
        Scene.measureit_scale_pos_x = IntProperty(name="X Position",
    
    Antonioya's avatar
    Antonioya committed
                                                  description="Margin on the X axis",
                                                  default=5,
                                                  min=0,
                                                  max=100)
    
        Scene.measureit_scale_pos_y = IntProperty(name="Y Position",
    
    Antonioya's avatar
    Antonioya committed
                                                  description="Margin on the Y axis",
                                                  default=5,
                                                  min=0,
                                                  max=100)
    
        Scene.measureit_gl_scaletxt = StringProperty(name="ScaleText", maxlen=48,
    
    Antonioya's avatar
    Antonioya committed
                                                     description="Scale title",
                                                     default="Scale:")
    
        Scene.measureit_scale_precision = IntProperty(name='Precision', min=0, max=5, default=0,
    
    Antonioya's avatar
    Antonioya committed
                                                      description="Number of decimal precision")
    
        Scene.measureit_ovr = BoolProperty(name="Override",
    
    Antonioya's avatar
    Antonioya committed
                                           description="Override colors and fonts",
                                           default=False)
    
        Scene.measureit_ovr_font = IntProperty(name="Font",
    
    Antonioya's avatar
    Antonioya committed
                                               description="Override text size",
                                               default=14, min=10, max=150)
    
        Scene.measureit_ovr_color = FloatVectorProperty(name="Override color",
    
    Antonioya's avatar
    Antonioya committed
                                                        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,
    
    Antonioya's avatar
    Antonioya committed
                                                description='override line width')
    
        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"),
    
    Antonioya's avatar
    Antonioya committed
                                                    ('2', "Meters", ""),
                                                    ('3', "Centimeters", ""),
    
    Antonioya's avatar
    Antonioya committed
                                                    ('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",
    
    Antonioya's avatar
    Antonioya committed
                                              description="Save an image with measures over"
                                                          " render image",
                                              default=False)
    
        Scene.measureit_render_type = EnumProperty(items=(('1', "Frame", "Render current frame"),
                                                          ('2', "Animation", "")),
    
    Antonioya's avatar
    Antonioya committed
                                                   name="Render type",
                                                   description="Type of render image")
    
        Scene.measureit_sum = EnumProperty(items=(('99', "-", "Select a group for sum"),
    
    Antonioya's avatar
    Antonioya committed
                                                  ('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",
    
    Antonioya's avatar
    Antonioya committed
                                          description="Add a frame in render output",
                                          default=False)
    
        Scene.measureit_rf_color = FloatVectorProperty(name="Fcolor",
    
    Antonioya's avatar
    Antonioya committed
                                                       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,
    
    Antonioya's avatar
    Antonioya committed
                                                description='Frame space from border')
    
        Scene.measureit_rf_line = IntProperty(name='fline', min=1, max=10, default=1,
    
    Antonioya's avatar
    Antonioya committed
                                              description='Line width for border')
    
        Scene.measureit_glarrow_a = EnumProperty(items=(('99', "--", "No arrow"),
    
    Antonioya's avatar
    Antonioya committed
                                                        ('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"),
    
    Antonioya's avatar
    Antonioya committed
                                                        ('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",
    
    Antonioya's avatar
    Antonioya committed
                                                description="Arrow size",
                                                default=15, min=6, max=500)
    
        Scene.measureit_debug = BoolProperty(name="Debug",
    
                                             description="Display information for debugging"
    
    Antonioya's avatar
    Antonioya committed
                                                         " (expand/collapse for enabling or disabling)"
    
    Brecht Van Lommel's avatar
    Brecht Van Lommel committed
                                                         " this information is only rendered for "
    
    Antonioya's avatar
    Antonioya committed
                                                         "selected objects",
                                             default=False)
    
        Scene.measureit_debug_select = BoolProperty(name="Selected",
    
    Antonioya's avatar
    Antonioya committed
                                                    description="Display information "
    
                                                                "only for selected items",
    
    Antonioya's avatar
    Antonioya committed
                                                    default=False)
    
        Scene.measureit_debug_vertices = BoolProperty(name="Vertices",
    
                                                      description="Display vertex index number",
    
    Antonioya's avatar
    Antonioya committed
                                                      default=True)
    
        Scene.measureit_debug_objects = BoolProperty(name="Objects",
    
                                                     description="Display object scene index number",
                                                     default=False)
    
        Scene.measureit_debug_vert_loc = BoolProperty(name="Location",
    
    Antonioya's avatar
    Antonioya committed
                                                      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",
    
    Antonioya's avatar
    Antonioya committed
                                                   default=False)
    
        Scene.measureit_debug_normals = BoolProperty(name="Normals",
    
    Antonioya's avatar
    Antonioya committed
                                                     description="Display face normal "
                                                                 "vector and creation order",
                                                     default=False)
    
        Scene.measureit_debug_normal_details = BoolProperty(name="Details",
    
    Antonioya's avatar
    Antonioya committed
                                                            description="Display face normal details",
                                                            default=True)
    
        Scene.measureit_debug_font = IntProperty(name="Font",
    
    Antonioya's avatar
    Antonioya committed
                                                 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,
    
    Antonioya's avatar
    Antonioya committed
                                                          default=0.5,
                                                          precision=2,
                                                          description="Normal arrow size")
    
        Scene.measureit_debug_width = IntProperty(name='Debug width', min=1, max=10, default=2,
    
    Antonioya's avatar
    Antonioya committed
                                                  description='Vector line thickness')
    
        Scene.measureit_debug_precision = IntProperty(name='Precision', min=0, max=5, default=1,
    
    Antonioya's avatar
    Antonioya committed
                                                      description="Number of decimal precision")
    
        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")
    
        wm = WindowManager
    
        wm.measureit_run_opengl = BoolProperty(default=False)
    
        from bpy.utils import unregister_class
        for cls in reversed(classes):
            unregister_class(cls)
    
        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_units
    
        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
    
        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()