[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