[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [2325] trunk/py/scripts/addons/ space_view3d_panel_measure.py: * Measure Panel - Version 0.7.15

Martin Buerbaum martin.buerbaum at gmx.at
Wed Sep 14 12:31:14 CEST 2011


Revision: 2325
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=2325
Author:   pontiac
Date:     2011-09-14 10:31:13 +0000 (Wed, 14 Sep 2011)
Log Message:
-----------
* Measure Panel - Version 0.7.15
* Measurement of face normals by TNae + extended to cover all cases.
* Patch link: http://blenderartists.org/forum/showthread.php?177800-Measure-script-%28Blender-2.5x-only%29&p=1896219&viewfull=1#post1896219
* Grouped measured values inside boxes.

Modified Paths:
--------------
    trunk/py/scripts/addons/space_view3d_panel_measure.py

Modified: trunk/py/scripts/addons/space_view3d_panel_measure.py
===================================================================
--- trunk/py/scripts/addons/space_view3d_panel_measure.py	2011-09-13 14:31:42 UTC (rev 2324)
+++ trunk/py/scripts/addons/space_view3d_panel_measure.py	2011-09-14 10:31:13 UTC (rev 2325)
@@ -18,7 +18,7 @@
 
 bl_info = {
     "name": "Measure Panel",
-    "author": "Buerbaum Martin (Pontiac)",
+    "author": "Buerbaum Martin (Pontiac), TNae (Normal patch)",
     "version": (0, 7, 13),
     "blender": (2, 5, 7),
     "api": 35864,
@@ -58,6 +58,12 @@
 "Snap during transform" enabled for fast measurement.
 
 Version history:
+v0.7.15 - Measurement of face normals by TNae + extended to cover all cases.
+    Grouped measured values inside boxes.
+v0.7.14
+    Fixed matrix calculation order.
+    Replaced region3d_get_2d_coordinates with location_3d_to_region_2d"
+    from bpy_extras.view3d_utils.
 v0.7.13 - Moved property definitions to registration function.
     Changed automatic callback adding to manual,
     the current API doesn't seem to allow this top be automatically yet.
@@ -392,7 +398,7 @@
 
         area = n.length / 2.0
 
-    return area
+    return area, n
 
 
 # Calculate the surface area of a mesh object.
@@ -405,6 +411,7 @@
 def objectSurfaceArea(obj, selectedOnly, globalSpace):
     if (obj and obj.type == 'MESH' and obj.data):
         areaTotal = 0
+        normTotal = Vector((0.0, 0.0, 0.0))
 
         mesh = obj.data
 
@@ -412,14 +419,17 @@
         for face in mesh.faces:
             if not selectedOnly or face.select:
                 if globalSpace:
-                    areaTotal += faceAreaGlobal(face, obj)
+                    a, n = faceAreaGlobal(face, obj)
+                    areaTotal += a
+                    normTotal += n
                 else:
                     areaTotal += face.area
+                    normTotal += face.normal
 
-        return areaTotal
+        return areaTotal, normTotal
 
     # We can not calculate an area for this object.
-    return -1
+    return -1, Vector((0.0, 0.0, 0.0))
 
 
 # User friendly access to the "space" setting.
@@ -622,10 +632,11 @@
                         if f.select == 1]
 
                     if len(faces_selected) > 0:
-                        area = objectSurfaceArea(obj, True,
+                        area, normal = objectSurfaceArea(obj, True,
                             measureGlobal(sce))
                         if (area >= 0):
                             sce.measure_panel_area1 = area
+                            sce.measure_panel_normal1 = normal
 
         elif (context.mode == 'OBJECT'):
             # We are working in object mode.
@@ -655,18 +666,24 @@
                 obj1, obj2 = context.selected_objects
 
                 # Calculate surface area of the objects.
-                area1 = objectSurfaceArea(obj1, False, measureGlobal(sce))
-                area2 = objectSurfaceArea(obj2, False, measureGlobal(sce))
+                area1, normal1 = objectSurfaceArea(obj1, False,
+                    measureGlobal(sce))
+                area2, normal2 = objectSurfaceArea(obj2, False,
+                    measureGlobal(sce))
                 sce.measure_panel_area1 = area1
                 sce.measure_panel_area2 = area2
+                sce.measure_panel_normal1 = normal1
+                sce.measure_panel_normal2 = normal2
 
             elif (obj):
                 # One object selected.
 
                 # Calculate surface area of the object.
-                area = objectSurfaceArea(obj, False, measureGlobal(sce))
+                area, normal = objectSurfaceArea(obj, False,
+                    measureGlobal(sce))
                 if (area >= 0):
                     sce.measure_panel_area1 = area
+                    sce.measure_panel_normal1 = normal
 
 
 class VIEW3D_OT_display_measurements(bpy.types.Operator):
@@ -815,10 +832,11 @@
                     # local  ... the object center to the 3D cursor.
                     # global ... the origin to the 3D cursor.
 
-                    row = layout.row()
+                    box = layout.box()
+                    row = box.row()
                     row.prop(sce, "measure_panel_dist")
 
-                    row = layout.row()
+                    row = box.row()
                     row.label(text="", icon='CURSOR')
                     row.label(text="", icon='ARROW_LEFTRIGHT')
                     if measureLocal(sce):
@@ -846,10 +864,11 @@
                     # We measure the distance from the
                     # selected vertex object to the 3D cursor.
 
-                    row = layout.row()
+                    box = layout.box()
+                    row = box.row()
                     row.prop(sce, "measure_panel_dist")
 
-                    row = layout.row()
+                    row = box.row()
                     row.label(text="", icon='CURSOR')
                     row.label(text="", icon='ARROW_LEFTRIGHT')
                     row.label(text="", icon='VERTEXSEL')
@@ -868,10 +887,11 @@
                     # We measure the distance between the
                     # two selected vertices.
 
-                    row = layout.row()
+                    box = layout.box()
+                    row = box.row()
                     row.prop(sce, "measure_panel_dist")
 
-                    row = layout.row()
+                    row = box.row()
                     row.label(text="", icon='VERTEXSEL')
                     row.label(text="", icon='ARROW_LEFTRIGHT')
                     row.label(text="", icon='VERTEXSEL')
@@ -898,12 +918,21 @@
 
                         if len(faces_selected) > 0:
                             if (sce.measure_panel_area1 >= 0):
-                                row = layout.row()
+                                box = layout.box()
+                                row = box.row()
                                 row.label(
                                     text=str(len(faces_selected)),
                                     icon='FACESEL')
+
+                                row = box.row()
+                                row.label(text="Area")
                                 row.prop(sce, "measure_panel_area1")
 
+                                row = box.row()
+                                row.label(text="Normal")
+                                row = box.row()
+                                row.prop(sce, "measure_panel_normal1")
+
                                 row = layout.row()
                                 row.operator("view3d.reenter_editmode",
                                     text="Update selection & area")
@@ -975,10 +1004,11 @@
 
                 obj1, obj2 = context.selected_objects
 
-                row = layout.row()
+                box = layout.box()
+                row = box.row()
                 row.prop(sce, "measure_panel_dist")
 
-                row = layout.row()
+                row = box.row()
                 row.label(text="", icon='OBJECT_DATA')
                 row.prop(obj1, "name", text="")
 
@@ -996,15 +1026,33 @@
                     if (sce.measure_panel_area1 >= 0
                     or sce.measure_panel_area2 >= 0):
                         if (sce.measure_panel_area1 >= 0):
-                            row = layout.row()
+                            box = layout.box()
+                            row = box.row()
                             row.label(text=obj1.name, icon='OBJECT_DATA')
+
+                            row = box.row()
+                            row.label(text="Area")
                             row.prop(sce, "measure_panel_area1")
 
+                            row = box.row()
+                            row.label(text="Normal")
+                            row = box.row()
+                            row.prop(sce, "measure_panel_normal1")
+
                         if (sce.measure_panel_area2 >= 0):
-                            row = layout.row()
+                            box = layout.box()
+                            row = box.row()
                             row.label(text=obj2.name, icon='OBJECT_DATA')
+
+                            row = box.row()
+                            row.label(text="Area")
                             row.prop(sce, "measure_panel_area2")
 
+                            row = box.row()
+                            row.label(text="Normal")
+                            row = box.row()
+                            row.prop(sce, "measure_panel_normal2")
+
                         row = layout.row()
                         row.prop(sce,
                             "measure_panel_transform",
@@ -1014,10 +1062,11 @@
                 # One object selected.
                 # We measure the distance from the object to the 3D cursor.
 
-                row = layout.row()
+                box = layout.box()
+                row = box.row()
                 row.prop(sce, "measure_panel_dist")
 
-                row = layout.row()
+                row = box.row()
                 row.label(text="", icon='CURSOR')
 
                 row.label(text="", icon='ARROW_LEFTRIGHT')
@@ -1033,10 +1082,19 @@
                     # Display surface area of the object.
 
                     if (sce.measure_panel_area1 >= 0):
-                        row = layout.row()
+                        box = layout.box()
+                        row = box.row()
                         row.label(text=obj.name, icon='OBJECT_DATA')
+
+                        row = box.row()
+                        row.label(text="Area")
                         row.prop(sce, "measure_panel_area1")
 
+                        row = box.row()
+                        row.label(text="Normal")
+                        row = box.row()
+                        row.prop(sce, "measure_panel_normal1")
+
                         row = layout.row()
                         row.prop(sce,
                             "measure_panel_transform",
@@ -1046,10 +1104,11 @@
                 # Nothing selected.
                 # We measure the distance from the origin to the 3D cursor.
 
-                row = layout.row()
+                box = layout.box()
+                row = box.row()
                 row.prop(sce, "measure_panel_dist")
 
-                row = layout.row()
+                row = box.row()
                 row.label(text="", icon='CURSOR')
                 row.label(text="", icon='ARROW_LEFTRIGHT')

@@ Diff output truncated at 10240 characters. @@


More information about the Bf-extensions-cvs mailing list