Skip to content
Snippets Groups Projects
space_view3d_panel_measure.py 42.9 KiB
Newer Older
  • Learn to ignore specific revisions
  •             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 = box.row()
    
                    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 = box.row()
                                row.label(text="Normal")
                                row = box.row()
                                row.prop(sce, "measure_panel_normal1")
    
    
                            if (sce.measure_panel_area2 >= 0):
    
                                box = layout.box()
                                row = box.row()
    
                                row.label(text=obj2.name, icon='OBJECT_DATA')
    
    
                                row = box.row()
                                row.label(text="Area")
    
                                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 = box.row()
    
                    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 = 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 = box.row()
    
                    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():
    
        # 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")
    
    
        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)