# HOpMarkupFreehand

## Fields

HC_KEY | `m_lPolyline`

## Functions

| `HOpMarkupFreehand`
HBaseOperator * | `Clone`
const char * | `GetName`
int | `OnLButtonDownAndMove`
int | `OnLButtonDown`
int | `OnLButtonUp`
void | `CreateMarkupFreehand`
void | `CreateMarkupFreehand`

## Detailed Description

class HOpMarkupFreehand : public HBaseOperator

  The HOpMarkupFreehand inserts a 2D freehand polyline into a markup layer. If a layer is already active, then the operator will use that layer. Otherwise, the operator will create a new unnamed layer.

  HOpMarkupFreehand implements three of the mouse event handlers defined on the base class and maps the event information to logic which inserts a polyline into the scene to serve as a ‘MarkupFreehand’.

  1. Left Button Down: operation initiated, markup begins

  2. Left Button Down and Drag: MarkupFreehand is incrementally built and inserted into the construction segment

  3. Left Button Up: depending on existence of an active markup layer it either opens the existing or creates a new markup layer and inserts freehand markup into it

  More Detailed Description: see event methods

  Public Functions

  HOpMarkupFreehand(HBaseView *view, int DoRepeat = 0, int DoCapture = 1)

    Constructs an HOpMarkupFreehand object.

    Parameters

      - view – A pointer to an HBaseView object

      - DoRepeat – An integer denoting whether this is a repeatable operator. This parameter has been deprecated.

      - DoCapture – An integer denoting whether the mouse state should be captured, which means that all mouse events should be received after a mousedown, even if it leaves the window. This parameter has been deprecated.

  virtual HBaseOperator *Clone()

    Creates a new operator which is associated with the same view as the current operator. The user is responsible for deleting the newly created operator.

    Returns

      A pointer to an HBaseOperator object

  virtual const char *GetName()

    returns a pointer to a copy of the operator

    Returns

      A pointer to a character string denoting the name of the operator, which is ‘HOpMarkupFreehand’.

  virtual int OnLButtonDownAndMove(HEventInfo &hevent)

    OnLButtonDownAndMove computes the line segment to be incrementally added to the existing polyline.

    Parameters

      hevent – An HEventInfo object containing information about the current event.

    Returns

      An HOperatorReturn indicating the status of the event.

  virtual int OnLButtonDown(HEventInfo &hevent)

    OnLButtonDown records the first pointer position and initializes the redlining mechanism by creating a polyline which will be incrementally built.

    Parameters

      hevent – An HEventInfo object containing information about the current event.

    Returns

      An HOperatorReturn indicating the status of the event.

  virtual int OnLButtonUp(HEventInfo &hevent)

    OnLButtonUp cleans up the construction segments used during the redling and inserts the polyline representing the ‘MarkupFreehand’ into the scene.

    Parameters

      hevent – An HEventInfo object containing information about the current event.

    Returns

      An HOperatorReturn indicating the status of the event.

  Public Members

  HC_KEY m_lPolyline

    key for HOOPS polyline

  Public Static Functions

  static void CreateMarkupFreehand(HBaseView *pView, const char *segment, unsigned int PolyLineLength, HPoint *pPolyline, bool emit_message)

    CreateMarkupFreehand inserts the polyline representing the freehand drawing into the active markup layer. If there is no active markup layer, then it creates a new unnamed layer.

    Parameters

      - pView – A pointer to the HBaseView object where the markup data should be inserted.

      - segment – The name of segment within markup layer that the freehand data should be inserted into.

      - PolyLineLength – Integer value indicating number of points in the freehand polyline.

      - pPolyline – An array of triplets, each one defining the x, y and z coordinate of a point of the freehand markup respectively.

      - emit_message – Determines if polyline creation is broadcasted to other HNet clients

  static void CreateMarkupFreehand(HBaseView *pView, const char *segment, unsigned int PolyLineLength, double *pPolyline, bool emit_message)