Newer
Older
elif len(context.selected_objects) == 2:
# 2 objects selected.
# We measure the distance between the 2 selected objects.
obj1, obj2 = context.selected_objects
box = layout.box()
row = box.row()
row.prop(sce, "measure_panel_dist")
row.label(text="", icon='OBJECT_DATA')
row.prop(obj1, "name", text="")
row.label(text="", icon='ARROW_LEFTRIGHT')
row.label(text="", icon='OBJECT_DATA')
row.prop(obj2, "name", text="")
row = layout.row()
row.prop(sce, "measure_panel_calc_area",
text="Surface area:")
if (sce.measure_panel_calc_area):
# Display surface area of the objects.
if (sce.measure_panel_area1 >= 0
or sce.measure_panel_area2 >= 0):
if (sce.measure_panel_area1 >= 0):
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")
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",
expand=True)
elif (obj):
# One object selected.
# We measure the distance from the object to the 3D cursor.
box = layout.box()
row = box.row()
row.prop(sce, "measure_panel_dist")
row.label(text="", icon='CURSOR')
row.label(text="", icon='ARROW_LEFTRIGHT')
row.label(text="", icon='OBJECT_DATA')
row.prop(obj, "name", text="")
row = layout.row()
row.prop(sce, "measure_panel_calc_area",
text="Surface area:")
if (sce.measure_panel_calc_area):
# Display surface area of the object.
if (sce.measure_panel_area1 >= 0):
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",
expand=True)
elif not context.selected_objects:
# Nothing selected.
# We measure the distance from the origin to the 3D cursor.
box = layout.box()
row = box.row()
row.prop(sce, "measure_panel_dist")
row.label(text="", icon='CURSOR')
row.label(text="", icon='ARROW_LEFTRIGHT')
row.label(text="Origin [0,0,0]")
else:
row = layout.row()
row.label(text="Selection not supported.",
icon='INFO')
def register():
Campbell Barton
committed
bpy.utils.register_module(__name__)
# Define a temporary attribute for the distance value
bpy.types.Scene.measure_panel_dist = bpy.props.FloatProperty(
name="Distance",
precision=PRECISION,
unit="LENGTH")
bpy.types.Scene.measure_panel_area1 = bpy.props.FloatProperty(
precision=PRECISION,
unit="AREA")
bpy.types.Scene.measure_panel_area2 = bpy.props.FloatProperty(
precision=PRECISION,
unit="AREA")
bpy.types.Scene.measure_panel_normal1 = bpy.props.FloatVectorProperty(
precision=PRECISION,
subtype="XYZ")
bpy.types.Scene.measure_panel_normal2 = bpy.props.FloatVectorProperty(
precision=PRECISION,
subtype="XYZ")
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
TRANSFORM = [
("measure_global", "Global",
"Calculate values in global space."),
("measure_local", "Local",
"Calculate values inside the local object space.")]
# Define dropdown for the global/local setting
bpy.types.Scene.measure_panel_transform = bpy.props.EnumProperty(
name="Space",
description="Choose in which space you want to measure.",
items=TRANSFORM,
default='measure_global')
# Define property for the draw setting.
bpy.types.Scene.measure_panel_draw = bpy.props.BoolProperty(
description="Draw distances in 3D View",
default=1)
# Define property for the calc-area setting.
# @todo prevent double calculations for each refresh automatically?
bpy.types.Scene.measure_panel_calc_area = bpy.props.BoolProperty(
description="Calculate mesh surface area (heavy CPU" \
" usage on bigger meshes)",
default=0)
def unregister():
Campbell Barton
committed
bpy.utils.unregister_module(__name__)
if __name__ == "__main__":
register()