Feedback panel

Feedback panel provide easy to use on-screen instructions for hints and shortcuts.

Feedback panel sample

Feedback panel sample


In order to use in your addon, you may copy

Archipack gl classes

archipack_gl provide some classes to draw either 2d or 3d (coords in pixels or world)

  • Lines
  • Arc
  • Text
  • Handles (tri and square)
  • Editable text
  • Cursor fence (like with B shorcut)
  • Cursor area (like when dragging with B shorcut)
  • FeedbackPanel


FeedbackPanel interface will remain stable, while other parts currently need some cleanup and are likely to change. Use it as wrapper around opengl to allow easy update when gl Api change - benefit from archpack’s updates.

Implementation sample

import bpy
from bpy.types import Operator
from .archipack_gl import FeedbackPanel

class DEMO_OP_Feedback(Operator):
            bl_idname = ""
            bl_label = "Feedback"
            bl_description = "Feedback panel in modal"
            bl_options = {'REGISTER', 'UNDO'}

            feedback = None
            _handle = None

            # draw callback
            def draw_callback(self, _self, context):

            def invoke(self, context, event):
                    # Create a panel instance
           = FeedbackPanel(title="Main Title")
          , "Sub title", "hint", [
                            ('SHIFT', 'deselect'),
                            ('CTRL', 'contains'),
                            ('A', 'All'),
                            ('I', 'Inverse'),
                            ('ESC or RIGHTMOUSE', 'exit when done')
                    # Enable panel

                    # panel draw handler
                    args = (self, context)
                    self._handle = bpy.types.SpaceView3D.draw_handler_add(self.draw_callback, args, 'WINDOW', 'POST_PIXEL')

                    # add modal handler
                    return {'RUNNING_MODAL'}

            def modal(self, context, event):

                    # tag area for gl redraw

                    # exit condition
                    if event.type in {'ESC', 'RIGHTMOUSE'}:
                            bpy.types.SpaceView3D.draw_handler_remove(self._handle, 'WINDOW')
                            return {'FINISHED'}

                    # do whatever you need

                    if user_do_something:
                            # here you are able to change feedback on the fly, calling instructions again
                  , 'Title', 'Hints about usage', [
                                    ('SHORTCUT', 'Hints about shortcut'),

                    if no_feeddback_need_for_this_action:
                            # disable / enable feedback drawing at any time too

                    return {'RUNNING_MODAL'}