You will typically implement drag operations in the viewer handle
onMouseEvent handler. The example
below demonstrates how to translate the geometry bound to a viewer handle by dragging the handle’s pivot.
import hou def __init__(self, **kwargs): self.__dict__.update(kwargs) #creates the handle dragger self.handle_dragger = hou.ViewerHandleDragger("dragger") def onMouseEvent( self, kwargs ): """ Called when a gadget is being picked and dragged. """ # The handle context containing pick/locate info on the active gadget hcontext = self.handle_context # The handle parameters hparms = kwargs["handle_parms"] # Tegular mouse event info ui_event = kwargs["ui_event"] reason = ui_event.reason() if hcontext.gadget() == Handle.GADGET_PIVOT: # The pivot is used by the user to move the handle. if reason == hou.uiEventReason.Start: # Get the current translation values from the handle # parameters handle_pos = hou.Vector3(hparms["tx"]["value"], hparms["ty"]["value"], hparms["tz"]["value"]) # Start the handle translate from the current handle pivot position. self.handle_dragger.startDrag(ui_event, handle_pos) elif reason == hou.uiEventReason.Changed or reason == hou.uiEventReason.Active: # drag the bound geometry interactively (while the LMB is down). drag_values = self.handle_dragger.drag(ui_event) # Update the handle parameters with the delta position returned by # the dragger. hparms["tx"]["value"] += drag_values["delta_position"] hparms["ty"]["value"] += drag_values["delta_position"] hparms["tz"]["value"] += drag_values["delta_position"] # Set the handle transform matrix self.xform = hu.updateTransform(self.xform, t=[hparms["tx"]["value"], hparms["ty"]["value"], hparms["tz"]["value"]]) if reason == hou.uiEventReason.Changed: # We are done, exit the drag. self.handle_dragger.endDrag() # Consume the event return True return False
Creates a viewer handle dragger object.
A name to identify the dragger.
Methods from hou.ViewerDragger
Configures the dragger to move the mouse with no constraint.
This method enables the dragger to snap on the construction plane or the viewport reference plane grid. The snapping options are typically set with the dialog.
startDragAlongLine(ui_event, line_origin, line_dir)
Configures the dragger to move the mouse along a line defined with a start point and a direction vector. When the line is picked and the mouse is moving, the dragger will constrain the mouse movement in the direction of the line.
startDragAlongPlane(ui_event, plane_point, plane_normal)
Configures the dragger to move the mouse along a plane defined with an origin point and a normal
vector. When the
LMB is down and the mouse is moving, the dragger will constrain the mouse
position to the plane.
startDragRotate(ui_event, center_pos, radius, rotate_axis, orient)
Configures the dragger to drag a "ring" around an axis.
A hou.Vector3 object representing the center of the rotation.
The radius of the rotation ring.
A hou.Vector3 vector representing the axis of rotation. This is typically a normalized vector used as the rotation plane normal.
A hou.Matrix3 object representing the orientation matrix of the axis.
Performs the drag operation. You would typically call this method when the mouse is being dragged.
Raises hou.OperationFailed if the dragger was not initialized first with one of the
start methods below.
A hou.Vector3 vector representing the delta mouse position related to the drag start position.
A hou.Vector3 vector representing the absolute mouse position in world coordinates.
This dictionary is returned for the Drag Rotate operation:
A hou.Vector3 vector representing the delta angle in radians related to the rotation start position.
A hou.Vector3 vector representing the total angle in radians related to the rotation start position.
A hou.Vector3 vector representing the rotation ring absolute position related to the rotation start position.
A hou.Matrix3 matrix representing the delta rotation matrix related to the
Ends the current drag operation by releasing any drag cache and other settings performed by the dragger.
Returns True if the dragger is ready to use or False otherwise. One of the dragger
must be called first to make a dragger usable.
Returns the name of the dragger.
Returns the start position used for configuring the current drag operation. For the Drag Rotate operation, the returned value refers to the center of rotation.
Returns the start direction used for configuring the current drag operation.
Returns the start position on the rotation ring for the Drag Rotate operation.
Returns the current viewport.