/*
 * Go2PartOpeningLength.h
 * 
 * Gocator system communication library
 * Copyright (C) 2013 by LMI Technologies Inc.
 * 
 * Licensed under The MIT License.
 * Redistributions of files must retain the above copyright notice.
 */

#ifndef LMITECH_Z_GO2PARTOPENINGLENGTH_H_INCLUDED
#define LMITECH_Z_GO2PARTOPENINGLENGTH_H_INCLUDED

#include <Go2Measurement.h>
#include <Go2PartTypes.h>
#include <Go2ApiBegin.h>

/*
 * Go2PartOpeningLength Class 
 */

typedef Go2PartMeasurement Go2PartOpeningLength;           // Represents part Go2PartOpeningLength measurement configuration.

GO2_EXPORT(Go2Status) Go2PartOpeningLength_SetId(Go2PartOpeningLength measurement, Go2UInt32 id); //
//
//  Description:
//      Sets the unique measurement identifier for the measurement.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//      id - Unique measurement identifier. 
//  Returns:
//      Operation status. 

GO2_EXPORT(Go2UInt32) Go2PartOpeningLength_Id(Go2PartOpeningLength measurement); //
//
//  Description:
//      Gets the unique measurement identifier for the measurement.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//  Returns:
//      Unique measurement identifier

GO2_EXPORT(Go2Status) Go2PartOpeningLength_SetName(Go2PartOpeningLength measurement, const Go2Char* name); //
//
//  Description:
//      Sets the descriptive name for the measurement.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//      name - Descriptive name. 
//  Returns:
//      Operation status. 
 
GO2_EXPORT(Go2Status) Go2PartOpeningLength_Name(Go2PartOpeningLength measurement, Go2Char* name, Go2UInt32 capacity); //
//
//  Description:
//      Gets the descriptive name for the measurement.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//      name - Receives descriptive name. 
//      capacity - Capacity of name buffer. 
//  Returns:
//      Operation status.  

GO2_EXPORT(Go2Status) Go2PartOpeningLength_SetDecisionMin(Go2PartOpeningLength measurement, Go2Double min); //
//
//  Description:
//      Sets the decision threshold minimum value.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//      min - Decision threshold minimum value. 
//  Returns:
//      Operation status.
//  Remarks: 
//      A decision is said to pass if the measurement value is between the minimum and maximum thresholds.
 
GO2_EXPORT(Go2Double) Go2PartOpeningLength_DecisionMin(Go2PartOpeningLength measurement); //
//
//  Description:
//      Gets the decision threshold minimum value.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//  Returns:
//      Decision threshold minimum.
//  Remarks: 
//      A decision is said to pass if the measurement value is between the minimum and maximum thresholds.

GO2_EXPORT(Go2Status) Go2PartOpeningLength_SetDecisionMax(Go2PartOpeningLength measurement, Go2Double max); //
//
//  Description:
//      Sets the decision threshold maximum value.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//      max - Decision threshold maximum value. 
//  Returns:
//      Operation status.
//  Remarks: 
//      A decision is said to pass if the measurement value is between the minimum and maximum thresholds.
 
GO2_EXPORT(Go2Double) Go2PartOpeningLength_DecisionMax(Go2PartOpeningLength measurement); //
//
//  Description:
//      Gets the decision threshold maximum value.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//  Returns:
//      Decision threshold maximum.
//  Remarks: 
//      A decision is said to pass if the measurement value is between the minimum and maximum thresholds.
 
GO2_EXPORT(Go2Status) Go2PartOpeningLength_EnableHold(Go2PartOpeningLength measurement, Go2Bool enable); //
//
//  Description:
//      Enables measurement value hold.
//  Arguments:
//      measurement - Go2PartOpeningLength object.
//      enable - GO2_TRUE to enable, or GO2_FALSE to disable.
//  Returns:
//      Operation status.

GO2_EXPORT(Go2Bool) Go2PartOpeningLength_HoldEnabled(Go2PartOpeningLength measurement); //
//
//  Description:
//      Reports whether value hold is currently enabled.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//  Returns:
//      GO2_TRUE if enabled, or GO2_FALSE if disabled.

GO2_EXPORT(Go2Status) Go2PartOpeningLength_EnableSmoothing(Go2PartOpeningLength measurement, Go2Bool enable); //
//
//  Description:
//      Enables measurement value smoothing.
//  Arguments:
//      measurement - Go2PartOpeningLength object.
//      enable - GO2_TRUE to enable, or GO2_FALSE to disable.
//  Returns:
//      Operation status.

GO2_EXPORT(Go2Bool) Go2PartOpeningLength_SmoothingEnabled(Go2PartOpeningLength measurement); //
//
//  Description:
//      Reports whether value smoothing is currently enabled.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//  Returns:
//      GO2_TRUE if enabled, or GO2_FALSE if disabled.

GO2_EXPORT(Go2UInt32) Go2PartOpeningLength_SmoothingWindowMin(Go2PartOpeningLength measurement); //
//
//  Description:
//      Gets the minimum smoothing window value.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//  Returns:
//      Minimum smoothing window value.

GO2_EXPORT(Go2UInt32) Go2PartOpeningLength_SmoothingWindowMax(Go2PartOpeningLength measurement); //
//
//  Description:
//      Gets the maximum smoothing window value.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//  Returns:
//      Maximum smoothing window value.

GO2_EXPORT(Go2Status) Go2PartOpeningLength_SetSmoothingWindow(Go2PartOpeningLength measurement, Go2UInt32 window); //
//
//  Description:
//      Sets the smoothing window value.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//      window - Smoothing window value.
//  Returns:
//      Operation status.

GO2_EXPORT(Go2UInt32) Go2PartOpeningLength_SmoothingWindow(Go2PartOpeningLength measurement); //
//
//  Description:
//      Gets the smoothing window value.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//  Returns:
//      Smoothing window value.

GO2_EXPORT(Go2Status) Go2PartOpeningLength_EnableLink(Go2PartOpeningLength measurement, Go2Bool enable); //
//
//  Description:
//      Enables bounding box rotation. When enabled, the bounding box will rotate according to the major 
//      axis of the detected part and measurements will be adjusted accordingly.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//      enable - GO2_TRUE to enable, or GO2_FALSE to disable.
//  Returns:
//      Operation status.
 
GO2_EXPORT(Go2Bool) Go2PartOpeningLength_LinkEnabled(Go2PartOpeningLength measurement); //
//
//  Description:
//      Reports whether measurement linking is enabled.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//  Returns:
//      GO2_TRUE if system operates at full frame rate; GO2_FALSE otherwise.

GO2_EXPORT(Go2Status) Go2PartOpeningLength_SetLink(Go2PartOpeningLength measurement, Go2UInt32 link); //
//
//  Description:
//      Sets the measurement id to which this measurement should link. Linked measurements must:
//          -link to a valid measurement id
//          -not link to themselves
//          -not link to a measurement that is already linked
//          -link only to measurements of the same basic type (eg, all PartOpening_? measurements)
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//      link - Measurement id to link to.
//  Returns:
//      Operation status.

GO2_EXPORT(Go2UInt32) Go2PartOpeningLength_Link(Go2PartOpeningLength measurement); //
//
//  Description:
//      Gets the measurement id of the linked measurement.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//  Returns:
//      The linked measurement ID.

GO2_EXPORT(Go2Status) Go2PartOpeningLength_SetType(Go2PartOpeningLength measurement, Go2PartOpeningType type); //
//
//  Description:
//      Sets the type of opening length measurement to be measured.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//      type - Type of opening length measurement to be measured.
//  Returns:
//      Operation status.

GO2_EXPORT(Go2PartOpeningType) Go2PartOpeningLength_Type(Go2PartOpeningLength measurement); //
//
//  Description:
//      Gets the type of opening length measurement to be measured.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//  Returns:
//      Type of opening length measurement to be measured.

GO2_EXPORT(Go2PartRegion3d) Go2PartOpeningLength_Region(Go2PartOpeningLength measurement); //
//
//  Description:
//      Gets the region object which defines the measurement's ROI. 
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//  Returns:
//      Region object.

GO2_EXPORT(Go2UInt32) Go2PartOpeningLength_RefRegionCount(Go2PartOpeningLength measurement); //
//
//  Description:
//      Gets the number of reference regions. 
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//  Returns:
//      Number of regions.

GO2_EXPORT(Go2Status) Go2PartOpeningLength_SetRefRegionCount(Go2PartOpeningLength measurement, Go2UInt32 count); //
//
//  Description:
//      Sets the number of reference regions to use. 
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//      count - Number of regions.
//  Returns:
//      Operation status.

GO2_EXPORT(Go2PartRegion2d) Go2PartOpeningLength_RefRegionAt(Go2PartOpeningLength measurement, Go2UInt32 index); //
//
//  Description:
//      Gets the reference region object at the specified index. 
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//      index - Index of the desired area.
//  Returns:
//      Region object.


GO2_EXPORT(Go2Double) Go2PartOpeningLength_NominalRadius(Go2PartOpeningLength measurement); //
//
//  Description:
//      Gets the nominal Radius of the hole to measure.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//  Returns:
//      Nominal Radius of the hole to measure (mm).

GO2_EXPORT(Go2Status) Go2PartOpeningLength_SetNominalRadius(Go2PartOpeningLength measurement, Go2Double Radius); //
//
//  Description:
//      Sets the nominal Radius of the hole to measure.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//      Radius - Nominal Radius of the hole to measure (mm).
//  Returns:
//      Operation status.


GO2_EXPORT(Go2Double) Go2PartOpeningLength_NominalWidth(Go2PartOpeningLength measurement); //
//
//  Description:
//      Gets the nominal Width of the hole to measure.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//  Returns:
//      Nominal Width of the hole to measure (mm).

GO2_EXPORT(Go2Status) Go2PartOpeningLength_SetNominalWidth(Go2PartOpeningLength measurement, Go2Double Width); //
//
//  Description:
//      Sets the nominal Width of the hole to measure.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//      Width - Nominal Width of the hole to measure (mm).
//  Returns:
//      Operation status.

GO2_EXPORT(Go2Double) Go2PartOpeningLength_WidthTolerance(Go2PartOpeningLength measurement); //
//
//  Description:
//      Gets the tolerance between the nominal width and the detected hole size.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//  Returns:
//      Width tolerance (mm).

GO2_EXPORT(Go2Status) Go2PartOpeningLength_SetWidthTolerance(Go2PartOpeningLength measurement, Go2Double tolerance); //
//
//  Description:
//      Sets the tolerance between the nominal width and the detected hole size.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//      tolerance - Width tolerance (mm).
//  Returns:
//      Operation status.


GO2_EXPORT(Go2Double) Go2PartOpeningLength_NominalLength(Go2PartOpeningLength measurement); //
//
//  Description:
//      Gets the nominal Length of the hole to measure.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//  Returns:
//      Nominal Length of the hole to measure (mm).

GO2_EXPORT(Go2Status) Go2PartOpeningLength_SetNominalLength(Go2PartOpeningLength measurement, Go2Double Length); //
//
//  Description:
//      Sets the nominal Length of the hole to measure.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//      Length - Nominal Length of the hole to measure (mm).
//  Returns:
//      Operation status.

GO2_EXPORT(Go2Double) Go2PartOpeningLength_LengthTolerance(Go2PartOpeningLength measurement); //
//
//  Description:
//      Gets the tolerance between the nominal Length and the detected hole size.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//  Returns:
//      Length tolerance (mm).

GO2_EXPORT(Go2Status) Go2PartOpeningLength_SetLengthTolerance(Go2PartOpeningLength measurement, Go2Double tolerance); //
//
//  Description:
//      Sets the tolerance between the nominal Length and the detected hole size.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//      tolerance - Length tolerance (mm).
//  Returns:
//      Operation status.


GO2_EXPORT(Go2Double) Go2PartOpeningLength_NominalAngle(Go2PartOpeningLength measurement); //
//
//  Description:
//      Gets the nominal Angle of the hole to measure.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//  Returns:
//      Nominal Angle of the hole to measure (mm).

GO2_EXPORT(Go2Status) Go2PartOpeningLength_SetNominalAngle(Go2PartOpeningLength measurement, Go2Double Angle); //
//
//  Description:
//      Sets the nominal Angle of the hole to measure.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//      Angle - Nominal Angle of the hole to measure (mm).
//  Returns:
//      Operation status.

GO2_EXPORT(Go2Double) Go2PartOpeningLength_AngleTolerance(Go2PartOpeningLength measurement); //
//
//  Description:
//      Gets the tolerance between the nominal Angle and the detected hole size.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//  Returns:
//      Angle tolerance (mm).

GO2_EXPORT(Go2Status) Go2PartOpeningLength_SetAngleTolerance(Go2PartOpeningLength measurement, Go2Double tolerance); //
//
//  Description:
//      Sets the tolerance between the nominal Angle and the detected hole size.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//      tolerance - Angle tolerance (mm).
//  Returns:
//      Operation status.

GO2_EXPORT(Go2Bool) Go2PartOpeningLength_AutoRefRegionEnabled(Go2PartOpeningLength measurement); //
//
//  Description:
//      Reports whether auto reference regions are enabled.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//  Returns:
//      A boolean representing whether the auto reference region is enabled (1 - true, 0 - false).

GO2_EXPORT(Go2Status) Go2PartOpeningLength_EnableAutoRefRegion(Go2PartOpeningLength measurement, Go2Bool enable); //
//
//  Description:
//      Enables or disables auto reference regions.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//      enable - GO2_TRUE enables auto reference regions, while GO2_FALSE disables them
//  Returns:
//      Operation status.

GO2_EXPORT(Go2Bool) Go2PartOpeningLength_AutoTiltCorrectionEnabled(Go2PartOpeningLength measurement); //
//
//  Description:
//      Reports whether auto tilt correction is enabled.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//  Returns:
//      A boolean representing whether the auto reference region is enabled (1 - true, 0 - false).

GO2_EXPORT(Go2Status) Go2PartOpeningLength_EnableAutoTiltCorrection(Go2PartOpeningLength measurement, Go2Bool enable); //
//
//  Description:
//      Enables or disables auto tilt correction.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//      enable - GO2_TRUE enables auto reference regions, while GO2_FALSE disables them
//  Returns:
//      Operation status.

GO2_EXPORT(Go2Double) Go2PartOpeningLength_TiltXAngle(Go2PartOpeningLength measurement); //
//
//  Description:
//      Gets the X axis tilt angle.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//  Returns:
//      Tilt angle along X axis (degrees).

GO2_EXPORT(Go2Status) Go2PartOpeningLength_SetTiltXAngle(Go2PartOpeningLength measurement, Go2Double tiltXAngle); //
//
//  Description:
//      Sets the X axis tilt angle.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//      tiltXAngle - tilt angle along X axis(degrees).  If it exceeds an internal reasonable range, it will be clamped to the boundary value of said range.
//  Returns:
//      Operation status.

GO2_EXPORT(Go2Double) Go2PartOpeningLength_TiltYAngle(Go2PartOpeningLength measurement); //
//
//  Description:
//      Gets the Y axis tilt angle.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//  Returns:
//      Tilt angle along Y axis (degrees).

GO2_EXPORT(Go2Status) Go2PartOpeningLength_SetTiltYAngle(Go2PartOpeningLength measurement, Go2Double tiltYAngle); //
//
//  Description:
//      Sets the Y axis tilt angle.
//  Arguments:
//      measurement - Go2PartOpeningLength object. 
//      tiltYAngle - tilt angle along Y axis(degrees).  If it exceeds an internal reasonable range, it will be clamped to the boundary value of said range.
//  Returns:
//      Operation status.



GO2_EXPORT(Go2Double) Go2PartOpeningLength_Offset(Go2PartOpeningLength measurement); //
//
//  Description:
//      Gets the measurement value offset.
//  Arguments:
//      measurement - Go2PartOpeningLength object.
//  Returns:
//      Measurement value offset.

GO2_EXPORT(Go2Status) Go2PartOpeningLength_SetOffset(Go2PartOpeningLength measurement, Go2Double offset); //
//
//  Description:
//      Sets the measurement value offset.
//  Arguments:
//      measurement - Go2PartOpeningLength object.
//      offset - Offset factor.
//  Returns:
//      Operation status.

GO2_EXPORT(Go2Double) Go2PartOpeningLength_Scale(Go2PartOpeningLength measurement); //
//
//  Description:
//      Gets the measurement value scale factor.
//  Arguments:
//      measurement - Go2PartOpeningLength object.
//  Returns:
//      Measurement value scale factor.

GO2_EXPORT(Go2Status) Go2PartOpeningLength_SetScale(Go2PartOpeningLength measurement, Go2Double scale); //
//
//  Description:
//      Sets the measurement value scale factor.
//  Arguments:
//      measurement - Go2PartOpeningLength object.
//      scale - Scale factor.
//  Returns:
//      Operation status.

GO2_EXPORT(Go2Status) Go2PartOpeningLength_EnablePartialDetection(Go2PartOpeningLength measurement, Go2Bool enabled); // //
//
//  Description:
//      Enables or disables partial hole detection.
//  Arguments:
//      measurement - Go2PartOpeningLength object.
//      enable - A boolean representing whether or not partial hole detection is enabled.
//  Returns:
//      Operation status.

GO2_EXPORT(Go2Bool) Go2PartOpeningLength_PartialDetectionEnabled(Go2PartOpeningLength measurement); // //
//
//  Description:
//      Gets the current partial hole detection value.
//  Arguments:
//      measurement - Go2PartOpeningLength object.
//  Returns:
//      GO2_TRUE if partial hole detection is enabled, GO2_FALSE if it is not.

GO2_EXPORT(Go2Status) Go2PartOpeningLength_EnableRefRegions(Go2PartOpeningLength measurement, Go2Bool enable); //
//
//  Description:
//      Enables or disables the optional reference region.
//  Arguments:
//      measurement - Go2PartOpeningLength object.
//      enable - Use GO2_TRUE to enable the optional reference region and GO2_FALSE to disable it.
//  Returns:
//      Operation status.

GO2_EXPORT(Go2Bool) Go2PartOpeningLength_RefRegionsEnabled(Go2PartOpeningLength measurement); //
//
//  Description:
//      Returns the current state of the optional reference region.
//  Arguments:
//      measurement - Go2PartOpeningLength object.
//  Returns:
//      GO2_TRUE if the optional reference region is enabled and GO2_FALSE if it is disabled.

GO2_EXPORT(Go2Bool) Go2PartOpeningLength_RegionEnabled(Go2PartOpeningLength measurement);   //
//
//  Description:
//      Returns the current state of the optional region.
//  Arguments:
//      measurement - Go2PartOpeningLength object.
//  Returns:
//      GO2_TRUE if the optional region is enabled and GO2_FALSE if it is disabled.

GO2_EXPORT(Go2Status) Go2PartOpeningLength_EnableRegion(Go2PartOpeningLength measurement, Go2Bool enable);   //
//
//  Description:
//      Enables or disables the optional region.
//  Arguments:
//      measurement - Go2PartOpeningLength object.
//      enable - Use GO2_TRUE to enable the optional region and GO2_FALSE to disable it.
//  Returns:
//      Operation status.

GO2_EXPORT(Go2UInt32) Go2PartOpeningLength_LinkOptionAt(Go2PartOpeningLength measurement, Go2UInt32 index); //
//
//  Description:
//      Gets the link-able measurement id at the specified index. 
//    Arguments:
//      measurement - Go2PartMeasurement object.
//  Returns:
//      The link-able measurement ID at the specified index.

GO2_EXPORT(Go2UInt32) Go2PartOpeningLength_LinkOptionCount(Go2PartOpeningLength measurement); //
//
//  Description:
//      Gets the number of link-able measurement IDs.
//  Arguments:
//      measurement - Go2PartMeasurement object.
//  Returns:
//      The link-able measurement count.

#include <Go2ApiEnd.h>
#endif
