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