Skip to content

Instantly share code, notes, and snippets.

@saurabheights
Last active March 29, 2023 11:04
Show Gist options
  • Save saurabheights/08982c625de60136620c4293b571940e to your computer and use it in GitHub Desktop.
Save saurabheights/08982c625de60136620c4293b571940e to your computer and use it in GitHub Desktop.

Quick Overview of Open3D Visualization Elements

Base Classes

Class Name Description
Application Global application singleton. This owns the menubar, windows, and event loop
Window Application window
Widget Base widget class
Rect Represents a widget frame
LayoutContext Context passed to Window's on_layout callback
Margins Margins for layouts
UIImage A bitmap suitable for displaying with ImageWidget
Label3D Displays text in a 3D scene
Menu A menu, possibly a menu tree
Size Size object
Theme Theme parameters such as colors used for drawing widgets (read-only)
Color Stores color for gui classes
FontDescription Class to describe a custom font
FontStyle Font style - NORMAL, BOLD, ITALIC, BOLD_ITALIC
KeyEvent Object that stores key events
KeyModifier Key modifier identifiers - NONE, SHIFT, META, ALT, CTRL
KeyName Names of keys. Used by KeyEvent.key MouseButton - Mouse button identifiers - NONE, LEFT, MIDDLE, RIGHT, BUTTON4, BUTTON5
MouseEvent Object that stores mouse events

Type Hierarchy for Widget Class

All other classes besides widget do not have child classes (AFAIK).

Input Reader Widgets (Rough Classification)

Button(Widget) (open3d.cuda.pybind.visualization.gui.Button) - Clickable button
RadioButton(Widget) (open3d.cuda.pybind.visualization.gui.RadioButton) - Exclusive selection from radio button list
Combobox(Widget) (open3d.cuda.pybind.visualization.gui.Combobox) - Exclusive selection from a pull-down menu
Checkbox(Widget) (open3d.cuda.pybind.visualization.gui.Checkbox) - Checkbox
ColorEdit(Widget) (open3d.cuda.pybind.visualization.gui.ColorEdit) - Color picker
NumberEdit(Widget) (open3d.cuda.pybind.visualization.gui.NumberEdit) - Allows the user to enter a number.
Slider(Widget) (open3d.cuda.pybind.visualization.gui.Slider) - A slider widget for visually selecting numbers
TextEdit(Widget) (open3d.cuda.pybind.visualization.gui.TextEdit) - Allows the user to enter or modify text
ToggleSwitch(Widget) (open3d.cuda.pybind.visualization.gui.ToggleSwitch) - ToggleSwitch
VectorEdit(Widget) (open3d.cuda.pybind.visualization.gui.VectorEdit) - Allows the user to edit a 3-space vector

Output Widgets (Rough Classification, for example Dialog can be used for output but FileDialog is also used to get inputs.)

Dialog(Widget) (open3d.cuda.pybind.visualization.gui.Dialog) - Dialog box
	FileDialog(Dialog) (open3d.cuda.pybind.visualization.gui.FileDialog)
ImageWidget(Widget) (open3d.cuda.pybind.visualization.gui.ImageWidget) - Displays a bitmap
Label(Widget) (open3d.cuda.pybind.visualization.gui.Label) - Displays text
ListView(Widget) (open3d.cuda.pybind.visualization.gui.ListView) - Displays a list of text
TreeView(Widget) (open3d.cuda.pybind.visualization.gui.TreeView) - Hierarchical list
	ColormapTreeCell(Widget) (open3d.cuda.pybind.visualization.gui.ColormapTreeCell) - TreeView cell with a number edit and color edit
	LUTTreeCell(Widget) (open3d.cuda.pybind.visualization.gui.LUTTreeCell) - TreeView cell with checkbox, text, and color edit 
	CheckableTextTreeCell(Widget) (open3d.cuda.pybind.visualization.gui.CheckableTextTreeCell) - TreeView cell with a checkbox and text
ProgressBar(Widget) (open3d.cuda.pybind.visualization.gui.ProgressBar) - Displays a progress bar
SceneWidget(Widget) (open3d.cuda.pybind.visualization.gui.SceneWidget) - Displays 3D content

Layouts of Widget

Layout1D(Widget) (open3d.cuda.pybind.visualization.gui.Layout1D) - Layout base class
	Horiz(Layout1D) (open3d.cuda.pybind.visualization.gui.Horiz) - Horizontal layout
	Vert(Layout1D) (open3d.cuda.pybind.visualization.gui.Vert) - Vertical layout
		ScrollableVert(Vert) (open3d.cuda.pybind.visualization.gui.ScrollableVert) - Vertical layout with title, whose contents are collapsable
		CollapsableVert(Vert) (open3d.cuda.pybind.visualization.gui.CollapsableVert) - Scrollable vertical layout
VGrid(Widget) (open3d.cuda.pybind.visualization.gui.VGrid) - Grid layout
StackedWidget(Widget) (open3d.cuda.pybind.visualization.gui.StackedWidget) - Like a TabControl but without the tabs
TabControl(Widget) (open3d.cuda.pybind.visualization.gui.TabControl) - Tab control

WidgetProxy(Widget) (open3d.cuda.pybind.visualization.gui.WidgetProxy) - Widget container to delegate any widget dynamically. Widget can not be managed dynamically. Although it is allowed to add more child widgets, it's impossible to replace some child with new on or remove children. WidgetProxy is designed to solve this problem. When WidgetProxy is created, it's invisible and disabled, so it won't be drawn or layout, seeming like it does not exist. When a widget is set by  set_widget, all  Widget's APIs will be conducted to that child widget. It looks like WidgetProxy is that widget. At any time, a new widget could be set, to replace the old one. and the old widget will be destroyed. Due to the content changing after a new widget is set or cleared, a relayout of Window might be called after set_widget. The delegated widget could be retrieved by  get_widget in case  you need to access it directly, like get check status of a CheckBox. API other than  set_widget and get_widget has completely same functions as Widget.
WidgetStack(WidgetProxy) (open3d.cuda.pybind.visualization.gui.WidgetStack) - A widget stack saves all widgets pushed into by push_widget and always shows the top one. The WidgetStack is a subclass of WidgetProxy, in otherwords, the topmost widget will delegate itself to WidgetStack. pop_widget will remove the topmost widget and callback set by set_on_top taking the new topmost widget will be called. The WidgetStack disappears in GUI if there is no widget in stack. 
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment