Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNBurn <nbwashburn@gmail.com>2017-08-12 08:01:05 +0300
committerNBurn <nbwashburn@gmail.com>2017-08-12 08:01:05 +0300
commit6451d10ff48f0bf4d95b504da295f760f64df14e (patch)
tree5460754389e01ec69cd2e22456e0cfc9975fabf6 /measureit/measureit_main.py
parent8068085bda0192fff3bb28a27bdc3c269dd3bcef (diff)
MeasureIt: Refactored code and added align options
Added option to rotate measurements to be align to specified angles in degrees Added option to horizontally align text to left, center, or right Added option to expand or collapse all measurement subpanels Redesign of Number panel option so its easier to match colors with measurements Hid various measurement adjustment options when disabled and would have no affect Redesign of button layout to reduce text truncation and improve visibility Minor cleanup of comments and code for better readability and pep8 compliance
Diffstat (limited to 'measureit/measureit_main.py')
-rw-r--r--measureit/measureit_main.py202
1 files changed, 158 insertions, 44 deletions
diff --git a/measureit/measureit_main.py b/measureit/measureit_main.py
index 633a1754..f325f8ab 100644
--- a/measureit/measureit_main.py
+++ b/measureit/measureit_main.py
@@ -160,6 +160,13 @@ class MeasureitProperties(PropertyGroup):
glfont_size = IntProperty(name="Text Size",
description="Text size",
default=14, min=6, max=150)
+ glfont_align = EnumProperty(items=(('L', "Left Align", ""),
+ ('C', "Center Align", ""),
+ ('R', "Right Align", "")),
+ name="Align Font",
+ description="Set Font Alignment")
+ glfont_rotat = IntProperty(name='Rotate', min=0, max=360, default=0,
+ description="Text rotation in degrees")
gllink = StringProperty(name="gllink",
description="linked object for linked measures")
glocwarning = BoolProperty(name="glocwarning",
@@ -365,13 +372,16 @@ class MeasureitEditPanel(Panel):
row = box.row()
row.prop(scene, 'measureit_scale', text="Scale")
if scene.measureit_scale is True:
- row.prop(scene, 'measureit_scale_factor', text="1")
- row.prop(scene, 'measureit_scale_precision', text="")
- row.prop(scene, 'measureit_gl_scaletxt', text="")
+ split = row.split(percentage=0.25, align=False)
+ split.prop(scene, 'measureit_scale_color', text="")
+ split.prop(scene, 'measureit_scale_factor', text="1")
row = box.row()
- row.prop(scene, 'measureit_scale_color')
+ row.separator()
+ row.prop(scene, 'measureit_gl_scaletxt', text="")
row.prop(scene, 'measureit_scale_font')
+ row.prop(scene, 'measureit_scale_precision', text="")
row = box.row()
+ row.separator()
row.prop(scene, 'measureit_scale_pos_x')
row.prop(scene, 'measureit_scale_pos_y')
@@ -379,9 +389,15 @@ class MeasureitEditPanel(Panel):
row = box.row()
row.prop(scene, 'measureit_ovr', text="Override")
if scene.measureit_ovr is True:
- row.prop(scene, 'measureit_ovr_color', text="")
+ split = row.split(percentage=0.25, align=False)
+ split.prop(scene, 'measureit_ovr_color', text="")
+ split.prop(scene, 'measureit_ovr_width', text="Width")
+ row = box.row()
+ row.separator()
row.prop(scene, 'measureit_ovr_font', text="Font")
- row.prop(scene, 'measureit_ovr_width', text="Width")
+ row.prop(scene, 'measureit_ovr_font_align', text="")
+ if scene.measureit_ovr_font_align == 'L':
+ row.prop(scene, 'measureit_ovr_font_rotation', text="Rotate")
mp = context.object.MeasureGenerator[0]
# -----------------
@@ -389,6 +405,9 @@ class MeasureitEditPanel(Panel):
# -----------------
if mp.measureit_num > 0:
box = layout.box()
+ row = box.row(True)
+ row.operator("measureit.expandallsegmentbutton", text="Expand all", icon="ZOOMIN")
+ row.operator("measureit.collapseallsegmentbutton", text="Collapse all", icon="ZOOMOUT")
for idx in range(0, mp.measureit_num):
if mp.measureit_segments[idx].glfree is False:
add_item(box, idx, mp.measureit_segments[idx])
@@ -479,9 +498,10 @@ class MeasureitEditPanel(Panel):
# -----------------------------------------------------
-# Add segment to the panel.
+# Add segment options to the panel.
# -----------------------------------------------------
def add_item(box, idx, segment):
+ scene = bpy.context.scene
row = box.row(True)
if segment.glview is True:
icon = "VISIBLE_IPO_ON"
@@ -489,17 +509,27 @@ def add_item(box, idx, segment):
icon = "VISIBLE_IPO_OFF"
row.prop(segment, 'glview', text="", toggle=True, icon=icon)
- row.prop(segment, 'gladvance', text="", toggle=True, icon="MANIPUL")
- row.prop(segment, 'gltxt', text="")
- row.prop(segment, 'glcolor', text="")
+ row.prop(segment, 'gladvance', text="", toggle=True, icon="SCRIPTWIN")
+ if segment.gltype == 20: # Area special
+ split = row.split(percentage=0.15, align=True)
+ split.prop(segment, 'glcolorarea', text="")
+ split = split.split(percentage=0.20, align=True)
+ split.prop(segment, 'glcolor', text="")
+ else:
+ split = row.split(percentage=0.25, align=True)
+ split.prop(segment, 'glcolor', text="")
+ split.prop(segment, 'gltxt', text="")
op = row.operator("measureit.deletesegmentbutton", text="", icon="X")
op.tag = idx # saves internal data
if segment.gladvance is True:
row = box.row(True)
- if segment.gltype != 10 and segment.gltype != 20:
- row.prop(segment, 'glspace', text="Distance")
-
row.prop(segment, 'glfont_size', text="Font")
+ row.prop(segment, 'glfont_align', text="")
+ if segment.glfont_align == 'L':
+ row.prop(segment, 'glfont_rotat', text="Rotate")
+ row = box.row(True)
+ if segment.gltype != 9 and segment.gltype != 10 and segment.gltype != 20:
+ row.prop(segment, 'glspace', text="Distance")
row.prop(segment, 'glfontx', text="X")
row.prop(segment, 'glfonty', text="Y")
@@ -513,13 +543,15 @@ def add_item(box, idx, segment):
if segment.gltype != 2 and segment.gltype != 10:
row = box.row(True)
- row.prop(segment, 'gldist', text="Distance", toggle=True, icon="ALIGN")
- row.prop(segment, 'glnames', text="Text", toggle=True, icon="FONT_DATA")
+ if scene.measureit_gl_show_d is True and segment.gltype != 9:
+ row.prop(segment, 'gldist', text="Distance", toggle=True, icon="ALIGN")
+ if scene.measureit_gl_show_n is True:
+ row.prop(segment, 'glnames', text="Text", toggle=True, icon="FONT_DATA")
# sum distances
if segment.gltype == 1 or segment.gltype == 12 or segment.gltype == 13 or segment.gltype == 14:
row.prop(segment, 'gltot', text="Sum")
- if segment.gltype != 10 and segment.gltype != 20:
+ if segment.gltype != 9 and segment.gltype != 10 and segment.gltype != 20:
row = box.row(True)
row.prop(segment, 'glwidth', text="Line")
row.prop(segment, 'gldefault', text="Automatic position")
@@ -530,8 +562,9 @@ def add_item(box, idx, segment):
row.prop(segment, 'glnormalz', text="Z")
# Loc axis
- if segment.gltype != 2 and segment.gltype != 10 \
- and segment.gltype != 12 and segment.gltype != 13 and segment.gltype != 14 and segment.gltype != 20:
+ if segment.gltype != 2 and segment.gltype != 9 and segment.gltype != 10 \
+ and segment.gltype != 11 and segment.gltype != 12 and segment.gltype != 13 \
+ and segment.gltype != 14 and segment.gltype != 20:
row = box.row(True)
row.prop(segment, 'glocx', text="X", toggle=True)
row.prop(segment, 'glocy', text="Y", toggle=True)
@@ -568,12 +601,8 @@ def add_item(box, idx, segment):
row = box.row(True)
row.prop(segment, 'glarc_a', text="")
row.prop(segment, 'glarc_b', text="")
- row.prop(segment, 'glarc_s', text="Size")
-
- # Area special
- if segment.gltype == 20:
- row = box.row(True)
- row.prop(segment, 'glcolorarea', text="")
+ if segment.glarc_a != '99' or segment.glarc_b != '99':
+ row.prop(segment, 'glarc_s', text="Size")
# ------------------------------------------------------------------
@@ -723,18 +752,24 @@ class MeasureitConfPanel(Panel):
# Configuration data
box = layout.box()
row = box.row()
- row.prop(scene, "measureit_gl_txt", text="Text")
- row = box.row()
- row.prop(scene, "measureit_default_color", text="")
+ split = row.split(percentage=0.2, align=True)
+ split.label("Text")
+ split = split.split(percentage=0.2, align=True)
+ split.prop(scene, "measureit_default_color", text="")
+ split.prop(scene, "measureit_gl_txt", text="")
+ row = box.row(True)
row.prop(scene, "measureit_hint_space")
+ row.prop(scene, "measureit_font_align", text="")
# Arrow
row = box.row(True)
row.prop(scene, "measureit_glarrow_a", text="")
row.prop(scene, "measureit_glarrow_b", text="")
- row.prop(scene, "measureit_glarrow_s", text="Size")
-
- row = box.row()
+ if scene.measureit_glarrow_a != '99' or scene.measureit_glarrow_b != '99':
+ row.prop(scene, "measureit_glarrow_s", text="Size")
+ row = box.row(True)
row.prop(scene, "measureit_font_size")
+ if scene.measureit_font_align == 'L':
+ row.prop(scene, "measureit_font_rotation", text="Rotate")
# ------------------------------------------------------------------
@@ -773,7 +808,7 @@ class MeasureitRenderPanel(Panel):
# -------------------------------------------------------------
-# Defines button for add a measure segment
+# Defines button that adds a measure segment
#
# -------------------------------------------------------------
class AddSegmentButton(Operator):
@@ -840,6 +875,8 @@ class AddSegmentButton(Operator):
# text
ms.gltxt = scene.measureit_gl_txt
ms.glfont_size = scene.measureit_font_size
+ ms.glfont_align = scene.measureit_font_align
+ ms.glfont_rotat = scene.measureit_font_rotation
# Sum group
ms.gltot = scene.measureit_sum
# Add index
@@ -860,7 +897,7 @@ class AddSegmentButton(Operator):
# -------------------------------------------------------------
-# Defines button for add area measure
+# Defines button that adds an area measure
#
# -------------------------------------------------------------
class AddAreaButton(Operator):
@@ -927,6 +964,8 @@ class AddAreaButton(Operator):
# text
ms.gltxt = scene.measureit_gl_txt
ms.glfont_size = scene.measureit_font_size
+ ms.glfont_align = scene.measureit_font_align
+ ms.glfont_rotat = scene.measureit_font_rotation
# Sum group
ms.gltot = scene.measureit_sum
# Add index
@@ -946,7 +985,7 @@ class AddAreaButton(Operator):
# -------------------------------------------------------------
-# Defines button for add a measure segment to x/y/z origin
+# Defines button that adds a measure segment to x/y/z origin
#
# -------------------------------------------------------------
class AddSegmentOrtoButton(Operator):
@@ -1015,6 +1054,8 @@ class AddSegmentOrtoButton(Operator):
# text
ms.gltxt = scene.measureit_gl_txt
ms.glfont_size = scene.measureit_font_size
+ ms.glfont_align = scene.measureit_font_align
+ ms.glfont_rotat = scene.measureit_font_rotation
# Sum group
ms.gltot = scene.measureit_sum
# Add index
@@ -1035,7 +1076,7 @@ class AddSegmentOrtoButton(Operator):
# -------------------------------------------------------------
-# Defines button for add a angle
+# Defines button that adds an angle measure
#
# -------------------------------------------------------------
class AddAngleButton(Operator):
@@ -1096,6 +1137,8 @@ class AddAngleButton(Operator):
# text
ms.gltxt = scene.measureit_gl_txt
ms.glfont_size = scene.measureit_font_size
+ ms.glfont_align = scene.measureit_font_align
+ ms.glfont_rotat = scene.measureit_font_rotation
# Add index
mp.measureit_num += 1
@@ -1114,7 +1157,7 @@ class AddAngleButton(Operator):
# -------------------------------------------------------------
-# Defines button for add a arc
+# Defines button that adds an arc measure
#
# -------------------------------------------------------------
class AddArcButton(Operator):
@@ -1179,6 +1222,8 @@ class AddArcButton(Operator):
# text
ms.gltxt = scene.measureit_gl_txt
ms.glfont_size = scene.measureit_font_size
+ ms.glfont_align = scene.measureit_font_align
+ ms.glfont_rotat = scene.measureit_font_rotation
# Add index
mp.measureit_num += 1
@@ -1197,7 +1242,7 @@ class AddArcButton(Operator):
# -------------------------------------------------------------
-# Defines button for add a label segment
+# Defines button that adds a label segment
#
# -------------------------------------------------------------
class AddLabelButton(Operator):
@@ -1260,6 +1305,8 @@ class AddLabelButton(Operator):
# text
ms.gltxt = scene.measureit_gl_txt
ms.glfont_size = scene.measureit_font_size
+ ms.glfont_align = scene.measureit_font_align
+ ms.glfont_rotat = scene.measureit_font_rotation
# Add index
mp.measureit_num += 1
@@ -1278,7 +1325,7 @@ class AddLabelButton(Operator):
# -------------------------------------------------------------
-# Defines button for add a link
+# Defines button that adds a link
#
# -------------------------------------------------------------
class AddLinkButton(Operator):
@@ -1404,6 +1451,8 @@ class AddLinkButton(Operator):
# text
ms.gltxt = scene.measureit_gl_txt
ms.glfont_size = scene.measureit_font_size
+ ms.glfont_align = scene.measureit_font_align
+ ms.glfont_rotat = scene.measureit_font_rotation
# link
ms.gllink = linkobject
# Add index
@@ -1423,7 +1472,7 @@ class AddLinkButton(Operator):
# -------------------------------------------------------------
-# Defines button for add a origin segment
+# Defines button that adds an origin segment
#
# -------------------------------------------------------------
class AddOriginButton(Operator):
@@ -1505,6 +1554,8 @@ class AddOriginButton(Operator):
# text
ms.gltxt = scene.measureit_gl_txt
ms.glfont_size = scene.measureit_font_size
+ ms.glfont_align = scene.measureit_font_align
+ ms.glfont_rotat = scene.measureit_font_rotation
# Add index
mp.measureit_num += 1
@@ -1520,7 +1571,7 @@ class AddOriginButton(Operator):
# -------------------------------------------------------------
-# Defines button for delete a measure segment
+# Defines button that deletes a measure segment
#
# -------------------------------------------------------------
class DeleteSegmentButton(Operator):
@@ -1554,7 +1605,7 @@ class DeleteSegmentButton(Operator):
# -------------------------------------------------------------
-# Defines button for delete all measure segment
+# Defines button that deletes all measure segments
#
# -------------------------------------------------------------
class DeleteAllSegmentButton(Operator):
@@ -1589,7 +1640,7 @@ class DeleteAllSegmentButton(Operator):
# -------------------------------------------------------------
-# Defines button for delete all measure segment
+# Defines button that deletes all measure segment sums
#
# -------------------------------------------------------------
class DeleteAllSumButton(Operator):
@@ -1615,7 +1666,69 @@ class DeleteAllSumButton(Operator):
# -------------------------------------------------------------
-# Defines button for render
+# Defines button that expands all measure segments
+#
+# -------------------------------------------------------------
+class ExpandAllSegmentButton(Operator):
+ bl_idname = "measureit.expandallsegmentbutton"
+ bl_label = "Expand"
+ bl_description = "Expand all measure properties"
+ bl_category = 'Measureit'
+ tag = IntProperty()
+
+ # ------------------------------
+ # Execute button action
+ # ------------------------------
+ def execute(self, context):
+ if context.area.type == 'VIEW_3D':
+ # Add properties
+ mainobject = context.object
+ mp = mainobject.MeasureGenerator[0]
+
+ for i in mp.measureit_segments:
+ i.gladvance = True
+
+ return {'FINISHED'}
+ else:
+ self.report({'WARNING'},
+ "View3D not found, cannot run operator")
+
+ return {'CANCELLED'}
+
+
+# -------------------------------------------------------------
+# Defines button that collapses all measure segments
+#
+# -------------------------------------------------------------
+class CollapseAllSegmentButton(Operator):
+ bl_idname = "measureit.collapseallsegmentbutton"
+ bl_label = "Collapse"
+ bl_description = "Collapses all measure properties"
+ bl_category = 'Measureit'
+ tag = IntProperty()
+
+ # ------------------------------
+ # Execute button action
+ # ------------------------------
+ def execute(self, context):
+ if context.area.type == 'VIEW_3D':
+ # Add properties
+ mainobject = context.object
+ mp = mainobject.MeasureGenerator[0]
+
+ for i in mp.measureit_segments:
+ i.gladvance = False
+
+ return {'FINISHED'}
+ else:
+ self.report({'WARNING'},
+ "View3D not found, cannot run operator")
+
+ return {'CANCELLED'}
+
+
+# -------------------------------------------------------------
+# Defines button for render option
#
# -------------------------------------------------------------
class RenderSegmentButton(Operator):
@@ -1646,7 +1759,6 @@ class RenderSegmentButton(Operator):
# noinspection PyBroadException
try:
result = bpy.data.images['Render Result']
- #if result.has_data is False:
bpy.ops.render.render()
except:
bpy.ops.render.render()
@@ -1805,6 +1917,8 @@ class AddNoteButton(Operator):
# text
ms.gltxt = scene.measureit_gl_txt
ms.glfont_size = scene.measureit_font_size
+ ms.glfont_align = scene.measureit_font_align
+ ms.glfont_rotat = scene.measureit_font_rotation
# Add index
mp.measureit_num += 1
@@ -1819,7 +1933,7 @@ class AddNoteButton(Operator):
# -------------------------------------------------------------
-# Defines button for enable/disable the tip display
+# Defines button that enables/disables the tip display
#
# -------------------------------------------------------------
class RunHintDisplayButton(Operator):